C++

2010-06-27 13 views
6

में एक ही प्रकार के लिए typedefs के बीच भेदभाव मैं नीचे करने के लिए इसी तरह की सुविधा चाहते हैं। इसलिए, मैं अलग-अलग टाइपपीफ के लिए अलग-अलग प्रकार के foo ऑब्जेक्ट बनाना चाहता हूं। मैं इसे g ++ में संकलित कर सकता हूं, लेकिन एमएसवीसी एक फिट कहता है कि foo (ए) पहले से परिभाषित किया गया है जब यह दूसरी परिभाषा foo (बी) को देखता है। मैं सूची में एक प्रकार की सूची और एक प्रकार की स्थिति का उपयोग कर typedefs बीच भेद करना के बारे में सोचा और एक बढ़ावा :: एमपीएल :: वेक्टर उपयोग करने की कोशिश:C++

#include <boost/mpl/vector.hpp > 
#include <boost/mpl/find.hpp> 

typedef int A; 
typedef int B; 


struct foo 
{ 
    typedef boost::mpl::vector<A, B> supported_types; 

    foo(boost::mpl::find<supported_types, A>::type, A a) {} 
    foo(boost::mpl::find<supported_types, B>::type, B b) {} 
}; 

लेकिन दुर्भाग्य से, भी मेरी typedef को छोड़ देता है और बस मिल दोनों मामलों में ए के लिए पुनरावर्तक देता है। मैं भी प्रत्येक प्रकार

enum { TYPE_A, TYPE_B }; 
template <int i> struct int2type {}; 

के लिए एक enum को परिभाषित करने और इसे का उपयोग करते हैं और इस int2type और कार्यक्रम में ग्रुप बी का उपयोग कर के बारे में सोचा। लेकिन यह मेरे लिए सुरुचिपूर्ण दिखता है क्योंकि यह त्रुटियों से ग्रस्त है। मैं एक टाइपलिस्ट का उपयोग करना चाहता हूं और ऐसा करता हूं, ताकि यह स्पष्ट हो कि किस प्रकार का समर्थन किया जाएगा।

कृपया मुझे बताएं कि ऐसा करने का एक सामान्य और एक्स्टेंसिबल तरीका है या नहीं।

उत्तर

8

boost strong typedef जो आप खोज रहे हैं उसे करना चाहिए।

#include <boost/strong_typedef.hpp> 

BOOST_STRONG_TYPEDEF(int, A); 
BOOST_STRONG_TYPEDEF(int, B); 
+0

धन्यवाद। मुझे इसकी ही खोज थी। – Venkatesan