मैं वर्तमान में एक सामान्य वेक्टर टेम्पलेट वर्ग (ज्यामितीय इकाई, कंटेनर नहीं) के बाद हस्ताक्षर के साथ लिख रहा हूँ ...किसी विशिष्ट स्थिति को पूरा होने पर C++ टेम्पलेट क्लास विधि के तत्कालता को कैसे रोकें?
template< typename T, unsigned N >
class vector
{...}
... जहां टी अंकगणितीय प्रकार और एन, आयाम है। मैं ऑपरेटर^(वर्ग परिभाषा के अंदर स्थित) की एक अधिभार के रूप में पार उत्पाद को परिभाषित करने और इसे सक्षम करने के केवल जब एन == 3. मैं अब है चाहते हैं:
typename boost::lazy_enable_if_c< (N == 3), vector >::type
inline operator ^(const vector &rhs) const
{
vector ret;
ret(0) = val_[1] * rhs(2) - val_[2] * rhs(1);
ret(1) = val_[2] * rhs(0) - val_[0] * rhs(2);
ret(2) = val_[0] * rhs(1) - val_[1] * rhs(0);
return ret;
}
दुर्भाग्य से, इस टेम्पलेट instantiating !
error: no type named ‘type’ in ‘struct boost::lazy_enable_if_c < false, flare::math::vector < flare::math::fixed < short int, 8u >, 2u > >’
क्या मैं गलत कर रहा हूँ: एन के साथ = 3, भले ही ऑपरेटर^संदर्भित नहीं है, तो निम्न त्रुटि पैदावार? ऐसे मामले में boost :: enable_if को बढ़ावा देने का कोई विकल्प है?
बहुत बहुत धन्यवाद।
सबसे पहले, गहराई से स्पष्टीकरण के लिए आपको बहुत बहुत धन्यवाद।दरअसल, मेरे पास टाइपिफ़ वेक्टर प्रकार था; मेरी कक्षा परिभाषा के अंदर, लेकिन मैं इस महत्वपूर्ण विवरण का उल्लेख करना भूल गया। यही कारण है कि मुझे समझ में नहीं आया कि क्यों जीसीसी इस त्रुटि को फेंक रहा था :: प्रकार परिभाषित नहीं किया जा रहा है। इसके अलावा, मैंने enable_if के lazy_ संस्करण के उद्देश्य को गलत समझा। आपकी व्याख्या ने मुझे इसे समझने में मदद की। इसके प्रकाश में, मैं बस ऑपरेटर के बाहरी संस्करण में बदल गया^और यह अपेक्षित के रूप में काम किया। त्रुटि संदेश उत्पन्न हुआ जब N! = 3 थोड़ा सा गूढ़ है, लेकिन इसका सामना किया जा सकता है। पुनः आपका बहुत - बहुत धन्यवाद! – pmjobin
@pmjobin: आपका स्वागत है :) हाँ, टेम्पलेट त्रुटि संदेश भयानक हैं ... –