जब कस्टम प्रकार लक्षण लेखन, मैं अक्सर उन्हें मानक पुस्तकालय प्रकार लक्षण से निकाले जाते हैं इस प्रकार है:मानक पुस्तकालय प्रकार से विरासत लक्षण
template<typename T>
struct some_type_trait:
std::is_arithmetic<T>
{};
हालांकि, मैं कभी-कभी आश्चर्य मानक के type
सदस्य प्रकार से इनहेरिट कि क्या पुस्तकालय प्रकार विशेषता क्लीनर है:
template<typename T>
struct some_type_trait:
std::is_arithmetic<T>::type
{};
समग्र विचार यह है कि अंत में std::bool_constant
मामलों से केवल विरासत है, लेकिन तथ्य यह है कि हम पहले उदाहरण में std::is_arithmetic
से इनहेरिट रहे हैं और std::bool_constant
(जैसा कि दूसरे मामले में) से सीधे नहीं है polymorphism या utilies के माध्यम से std::is_base_of
के माध्यम से देखा जा सकता है।
सार है कि type
सदस्य प्रकार के माध्यम से bool_constant
से सीधे विरासत में क्लीनर का मानना है, क्योंकि यह बिल्कुल है कि हम क्या करना चाहते हैं। हालांकि, std::is_arithmetic
से विरासत में थोड़ा छोटा है और अनिवार्य रूप से वही व्यवहार प्रदान करता है। तो ... क्या कोई सूक्ष्म लाभ है कि एक या दूसरे (सहीता, संकलन समय ...) चुनते समय मुझे याद आ रही है? क्या सूक्ष्म परिदृश्य हैं जहां std::is_arithmetic
से उत्तराधिकारी अंतर्निहित bool_constant
से सीधे विरासत की तुलना में, एप्लिकेशन के व्यवहार को बदल सकता है?
यह कुछ गुणवत्ता बाइकहेडिंग है: डी – Rerito
एफडब्ल्यूआईडब्ल्यू, en.cppreference.com पर "संभावित कार्यान्वयन" सीधे 'std :: integral_constant' का उत्तराधिकारी है। इस "शैली" के बाद आपका उदाहरण 'std :: integral_constant :: value>' से प्राप्त होगा। –
@DanielJour अगर मुझे गलत नहीं लगता है, तो टाइप विशेषता के लिए 'std :: integral_constant' से विरासत अनिवार्य है। सवाल यह है कि क्या टाइपिंग विशेषता के माध्यम से ':: टाइप' या परोक्ष रूप से' std :: integral_constant' से सीधे प्राप्त करना बेहतर है या नहीं। हो सकता है कि मैं आपकी टिप्पणी को समझ नहीं पा रहा हूं:/ – Morwenn