दुर्भाग्यवश वांछित वाक्यविन्यास संभव नहीं हो सकता क्योंकि टेम्पलेट तत्कालता को पारित किए गए नाम पहले से ही परिभाषित किए जाने चाहिए। आपके मामले में myType1
और myType2
संकलक बिंदु दृश्य से कुछ भी नाम नहीं देंगे। लेकिन यदि आप वाक्य रचना आप उल्लेख किया है पर जोर नहीं कर रहे हैं आप के रूप में निम्नानुसार std::enable_if
उपयोग करने के लिए कोशिश कर सकते:
#include <type_traits>
struct A {
struct myType1: std::enable_if<true, int> { }; //std::conditional_typedef<true,int,myType1>; // Performs "typedef int myType1".
struct myType2: std::enable_if<false, int> { }; //std::conditional_typedef<false,int,myType2>; // Does nothing at all.
};
int main() {
A::myType1::type i;
//A::myType2::type i2; // causes error: no type named 'type' in 'A::myType2'
(void)i;
}
[live demo]
संपादित करें:
फिर भी एक और तरीका है कि मेरे दिमाग में आया (डिफ़ॉल्ट टेम्पलेट पैरामीटर के साथ उपयोग करने का उपयोग):
#include <type_traits>
struct A {
template <class T = int>
using myType1 = typename std::enable_if<true, T>::type;
template <class T = int>
using myType2 = typename std::enable_if<false, T>::type;
};
int main() {
A::myType1<> i;
//A::myType2<> j;
(void)i;
}
[live demo]
स्रोत
2016-12-01 10:22:59
क्या आप सैद्धांतिक 'if (...) typedef ...;' के साथ कुछ उदाहरण कोड प्रदान कर सकते हैं? विशेष रूप से, टाइप किए गए कोड के साथ क्या होना चाहिए जो typedef का उपयोग करता है यदि टाइपपीफ "निष्पादित" नहीं है? – Quentin
[std :: enable_if] (http://en.cppreference.com/w/cpp/types/enable_if) – Danh
हालत विशेषज्ञता के आधार पर पर्याप्त हो सकता है ... –