में एक छोटे से अभिन्न प्रकार को समझने के लिए सबसे छोटा अभिन्न प्रकार कैसे पता लगाया जा सकता है, मुझे संकलित समय में, किसी विशेष संख्या का प्रतिनिधित्व करने वाले छोटे हस्ताक्षरित अभिन्न प्रकार को समझने की आवश्यकता है। कुछ इस तरह ...संकलन समय
//////////////////////////////////////////////////////////////////////////
template<size_t Bits>
struct uint_least{};
template<>
struct uint_least<8>{ typedef std::uint8_t type; };
template<>
struct uint_least<16>{ typedef std::uint16_t type; };
//////////////////////////////////////////////////////////////////////////
template<size_t max>
struct uint_least_bits
{
static const size_t value = 14; // just a placeholder
};
//////////////////////////////////////////////////////////////////////////
template<size_t max>
class A
{
typedef typename uint_least<uint_least_bits<max>::value>::type underlying_type;
underlying_type m_X;
};
uint_least
आप छोटी से छोटी अहस्ताक्षरित अभिन्न प्रकार है कि कम से कम Bits
बड़े देना करने के लिए है और यह 64 64 (न सिर्फ 8, 16, 32 अप करने के लिए किसी भी मूल्य के लिए काम करना चाहिए लेकिन 1, 4, 13, आदि)।
uint_least_bits
आपको max
का प्रतिनिधित्व करने के लिए आवश्यक न्यूनतम बिट्स देने के लिए है।
- मैं
uint_least
कैसे कार्यान्वित कर सकता हूं? - मैं
uint_least_bits
को कैसे कार्यान्वित कर सकता हूं? - किस प्रकार
bits
,min
, औरmax
होना चाहिए? अगर उत्तर एक टेम्पलेट प्रकार है, तो मैं अमान्य इनपुट के खिलाफ कैसे सुरक्षा कर सकता हूं?
लक्षणों की सटीक संरचना कोई फर्क नहीं पड़ता। जो मैंने प्रदान किया है उसे स्क्रैप करने के लिए स्वतंत्र महसूस करें। मुझे बस एक संख्या प्रदान करने की आवश्यकता है और इसे सबसे छोटा हस्ताक्षरित अभिन्न प्रकार वापस प्राप्त करने की आवश्यकता है जो इसे पकड़ सकता है।
आप अपने अभिन्न स्थिरांक पर केवल 'decltype' का उपयोग कर सकते हैं। –
'int_least_bits <255, 256> :: मान' 1 या 9 होना चाहिए? – GManNickG
@GManNickG अच्छा सवाल। मैं 9 कहूंगा, हालांकि असहमत होने के लिए स्वतंत्र महसूस करें और मुझे बताएं कि – David