सी ++ टेम्पलेट टाइपडिफ


368

मुझे कक्षा में जाना है

template<size_t N, size_t M>
class Matrix {
    // ....
};

मैं एक ऐसा बनाना चाहता हूं typedefजो एक Vector(कॉलम वेक्टर) बनाता है जो Matrixआकार N और 1 के बराबर है । कुछ ऐसा है:

typedef Matrix<N,1> Vector<N>;

जो संकलित त्रुटि पैदा करता है। निम्नलिखित कुछ समान बनाता है, लेकिन जैसा मैं चाहता हूं वैसा नहीं:

template <size_t N>
class Vector: public Matrix<N,1>
{ };

क्या कोई समाधान है या इसके लिए बहुत महंगा वर्कअराउंड / सर्वोत्तम-अभ्यास नहीं है?

जवाबों:


548

C ++ 11 ने अन्य उपनामों की घोषणा की , जो कि सामान्यीकरण कर रहे हैं, जो typedefटेम्पलेट्स की अनुमति देते हैं:

template <size_t N>
using Vector = Matrix<N, 1>;

के प्रकार Vector<3>के बराबर है Matrix<3, 1>


C ++ 03 में, निकटतम सन्निकटन था:

template <size_t N>
struct Vector
{
    typedef Matrix<N, 1> type;
};

यहां, प्रकार Vector<3>::typeके बराबर है Matrix<3, 1>


45
ओह महान, मैंने C ++ 0x के इस भाग को नहीं देखा था और मैं कुछ समय के लिए टेंपलेटेड टंकण के बारे में बात कर रहा था ... लगता है कि मुझे अंतिम ड्राफ्ट का अधिक गहन अध्ययन करना चाहिए।
मैथ्यू एम।

2
क्या निर्माण करने वाले निर्माणकर्ता ओपी के मूल समाधान को अधिक व्यावहारिक समाधान बना सकते हैं?
स्टैकडॉक्ड 30

2
@StackedCrooked: अपने लक्ष्यों पर निर्भर करता है। मैं इनहेरिटेंस से बचता हूं कि रचना कब करेगी (और हां, इनहेरिट करने वाले कंस्ट्रक्टर इन दोनों को आसान बना देंगे), लेकिन मैं कंपोजीशन से भी बचता हूं, जब कोई टाइफेड करेगा।
GManNickG

1
उपयोग करना विशेषज्ञता का समर्थन नहीं करता है यदि मैं गलत नहीं हूं, तो दूसरा विकल्प अभी भी कई मामलों में उपयोगी है।
उत्कर्ष भारद्वाज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.