2010-12-22 16 views
7

मैं प्रकारों को मानचित्र बनाने के लिए एक तरीका ढूंढ रहा हूं, f.i. एक वर्ग के डबल होने:टेम्पलेट्स द्वारा टाइप मैपिंग

class Double 
{ 
public: 
    typedef double basic_type; 
    ... 
}; 

मैं एक प्रकार ढलाईकार करने में सक्षम होना चाहते हैं ताकि

typeid(TypeToObjectType<double>::type) == typeid(Double) 

कोई भी विचार कैसे पूरा करने के लिए इस (आंशिक विशेषज्ञताओं के माध्यम से आदि)?

उत्तर

9

आप विशेषज्ञता के माध्यम से इस लक्ष्य को हासिल कर सकते हैं:

template<class T> 
struct TypeToObjectType; 

template<> 
struct TypeToObjectType<double> { 
    typedef Double type; 
}; 

नोट आप प्रकार है जिस पर आप TypeToObjectType काम करना चाहता हूँ से प्रत्येक के लिए एक विशेषज्ञता प्रदान करने के लिए है। मैक्रोज़ यहां सहायक हो सकते हैं:

#define SPECIALIZE_TYPETOOBJECTTYPE(ObjectType) \ 
    template<> struct TypeToObjectType<ObjectType::basic_type> { \ 
     typedef ObjectType type; \ 
    }; 

SPECIALIZE_TYPETOOBJECTTYPE(Int) 
SPECIALIZE_TYPETOOBJECTTYPE(Double) 
+0

धन्यवाद, मुझे लगभग यह था :) यह वही है जो मैं चाहता था। – Robert

4

ध्वनि आप देख रहे हैं की तरह कुछ इस तरह के लिए:

template<typename T> 
struct TypeToObjectType; 

// specialization for T=double  
template<> 
struct TypeToObjectType<double> { 
    typedef Double type; 
}; 

यहाँ TypeToObjectType<double>::typeDouble है और आपको अतिरिक्त मैपिंग के लिए अन्य विशेषज्ञताओं जोड़ सकते हैं।

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