template<typename T>
class vec3
{
public:
typename T type_t;
T x;
T y;
T z;
};
template<typename T>
struct numeric_type_traits_basic_c
{
typedef T type_t;
typedef T scalar_t;
};
template<typename T>
struct numeric_type_traits_vec3_c
{
typedef T type_t;
typedef typename T::type_t scalar_t;
};
typedef numeric_type_traits_basic_c<int> int_type_traits;
typedef numeric_type_traits_vec3_c< vec3<int> > vec3_int_type_traits;
यह स्केलर और वेक्टर के लिए प्रकार का गुण है, केवल अंतर यह है कि एक वेक्टर के लिए स्केलर प्रकार, इसके तत्व का प्रकार है। ठीक काम करता है।टाइप गुण विशेषज्ञता
लेकिन मैं वास्तव में उन दो वर्गों के लिए एक ही नाम का उपयोग करने में सक्षम होना चाहता हूं।
template<typename T>
struct numeric_type_traits_c
{
typedef T type_t;
typedef ????? scalar_t;
};
मैं जानता हूँ कि यह अगर वर्ग प्रत्येक प्रकार मैं जरूरत के लिए स्पष्ट रूप से विशेष है ऐसा करने के लिए संभव है: int, नाव, vec3, vec3 ...
दोहराव के लिए बहुत कुछ है यही कारण है कि ... कैसे क्या मैं कोड के पहले बिट की सादगी रख सकता हूं लेकिन एक ही कक्षा का नाम एक ही समय में हो सकता है?
टाइप विशेषता के पीछे का इरादा इससे बचने के लिए है क्योंकि प्रकार की विशेषता आपको ऐसी जानकारी प्रदान करने का अनुमान है –