आप और अधिक गैर प्रकार टेम्पलेट पैरामीटर जोड़ सकते हैं "अनुकरण" करने के लिए अतिरिक्त बिट्स:
// Utility metafunction used by top_bit<N>.
template <unsigned long long N1, unsigned long long N2>
struct compare {
enum { value = N1 > N2 ? N1 >> 1 : compare<N1 << 1, N2>::value };
};
// This is hit when N1 grows beyond the size representable
// in an unsigned long long. It's value is never actually used.
template<unsigned long long N2>
struct compare<0, N2> {
enum { value = 42 };
};
// Determine the highest 1-bit in an integer. Returns 0 for N == 0.
template <unsigned long long N>
struct top_bit {
enum { value = compare<1, N>::value };
};
template <unsigned long long N1, unsigned long long N2 = 0>
struct binary {
enum {
value =
(top_bit<binary<N2>::value>::value << 1) * binary<N1>::value +
binary<N2>::value
};
};
template <unsigned long long N1>
struct binary<N1, 0> {
enum { value = (N1 % 10) + 2 * binary<N1/10>::value };
};
template <>
struct binary<0> {
enum { value = 0 } ;
};
आप के रूप में पहले इसका उपयोग कर सकते, जैसे:
binary<1001101>::value
लेकिन तुम भी निम्न का उपयोग कर सकते बराबर रूपों:
binary<100,1101>::value
binary<1001,101>::value
binary<100110,1>::value
असल में, अतिरिक्त पैरामीटर आप एक और 20 बिट के साथ खेलने के लिए देता है। यदि आवश्यक हो तो आप और भी पैरामीटर जोड़ सकते हैं।
क्योंकि दूसरे नंबर का स्थान मूल्य यह पता लगाने के लिए उपयोग किया जाता है कि बाईं ओर कितनी दूर तक स्थानांतरित करने की आवश्यकता है, दूसरा नंबर 1 से शुरू होना चाहिए। (यह वैसे भी आवश्यक है, इसे शुरू करने के बाद से 0 संख्या को अंडाकार संख्या के रूप में व्याख्या करने का कारण बनता है।)
स्रोत
2009-03-31 13:41:37
20 की सीमा शायद संकलक निर्भर है। यह इस बात पर निर्भर करता है कि यह कितना टेम्प्लेट रिकर्सन सहन करेगा। कुछ आधुनिक कंपाइलर्स आपको अधिकतम टेम्पलेट रिकर्सन गहराई को सेट करने के लिए तर्क में प्रवेश करने की अनुमति देंगे। –
हालांकि, सीमा उस दशमलव अंकों की संख्या के कारण थी जो आप बिना हस्ताक्षरित लंबे समय तक स्टोर कर सकते थे, क्योंकि यह मूल रूप से * दशमलव * संख्या 101011011 ले रहा है और इसे बाइनरी में बदल रहा है, हां? – paxdiablo
पैक्स: हाँ, कम से कम जीसीसी के लिए जिसका मैं उपयोग कर रहा हूं। – Unknown