2010-06-09 19 views
5

मुझे यकीन है कि बूस्ट में ऐसा करने के लिए कुछ कार्य हैं, लेकिन मुझे प्रासंगिक पुस्तकालयों को पर्याप्त रूप से पर्याप्त नहीं पता है। मेरे पास एक टेम्पलेट क्लास है, जो कि एक मोड़ को छोड़कर, जहां मुझे सशर्त प्रकार को परिभाषित करने की आवश्यकता है, को छोड़कर बहुत बुनियादी है। यहाँ मैंसशर्त प्रकार परिभाषा

struct PlaceHolder {}; 
    template <typename T> 
class C{ 
    typedef (T == PlaceHolder ? void : T) usefulType; 
}; 

मैं उस प्रकार सशर्त कैसे लिख सकता हूँ क्या चाहते हैं के लिए छद्म कोड है?

+0

दिलचस्प। किस परिस्थिति में यह उपयोगी होगा? क्या आप एक उदाहरण प्रदान कर सकते हैं। – Stephen

+0

यहां मेरा उदाहरण था। एक टेम्पलेट तर्क के लिए, TYPE कहें, मूल्य रखने वाले प्लेसहोल्डर का अर्थ है "कुछ सुविधा बंद करें"। कॉलबैक का एक सेट है जिसमें वापसी प्रकार TYPE * है कि सुविधा को बंद करने का प्राकृतिक अर्थ कॉलबैक के लिए रिटर्न टाइप शून्य है। उपयोगी टाइप कॉलबैक के लिए वापसी मूल्य है। –

+0

@pythonicmetaphor क्या आप स्वीकार किए गए उत्तर को बदल सकते हैं? टाइम्स अब अलग हैं। – Ven

उत्तर

8
इसके अलावा नए मानक के साथ

:

typedef typename std::conditional<std::is_same<T, PlaceHolder>::value, void, T>::type usefulType

+1

यह स्वीकार कर लिया asnwer होना चाहिए। –

2
template < typename T > 
struct my_mfun : boost::mpl::if_ 
< 
    boost::is_same<T,PlaceHolder> 
, void 
, T 
> {}; 

template < typename T > 
struct C { typedef typename my_mfun<T>::type usefulType; }; 
+0

कोड 4 रिक्त स्थान से उपसर्ग किया जाना चाहिए। आप टेक्स्ट का चयन कर सकते हैं और इसे थोक में करने के लिए 101010 बटन पर क्लिक कर सकते हैं। – GManNickG

+0

धन्यवाद, लेकिन अपने जवाब में परिवर्तन न करें। –

+7

पूछे जाने वाले प्रश्न देखें: "आप अपने सवाल और जवाब के विचार के साथ सहज अन्य विश्वसनीय उपयोगकर्ताओं के द्वारा संपादित किया जा नहीं हैं, तो यह आपके लिए साइट नहीं हो सकता।" – Bill

6

मुझे लगता है कि इस सिद्धांत आप के बाद कर रहे हैं है:

template< class T > 
struct DefineMyTpe 
{ 
    typedef T usefulType; 
}; 

template<> 
struct DefineMyType<PlaceHolder> 
{ 
    typedef void usefulType; 
}; 

template< class T > 
class C 
{ 
    typedef typename DefineMyType<T>::usefulType usefulType; 
}; 
+1

यह 2015 – Ven

+1

यह नहीं करना चाहिए में स्वीकार किए जाते हैं जवाब नहीं होना चाहिए, लेकिन मैं इसे बदल नहीं सकते .. बस std :: सशर्त का उपयोग कर एक वोट दें, किसी भी एसओ उपयोगकर्ता शायद बहुत चालाक सबसे upvoted जवाब पर विचार करने दिया जाएगा। – stijn

+1

कृपया एक या कुछ "@rafak द्वारा बाद में जवाब देखने के" जोड़ने के लिए, ताकि लोगों को इसे देखने के लिए अग्रिम में पता है। – Ven

संबंधित मुद्दे