मैं एक परियोजना एक टेम्पलेट समारोह के रूप में तो है, जिस पर काम कर रहा हूँ पर संकलन विफल:मेक सी ++ टेम्पलेट समारोह के विशिष्ट इन्स्टेन्शियशन
template <class T>
T foo<T>(T val) { return someFunc(val); }
template <>
bool foo<bool>(bool val) { return otherFunc(val); };
अब, मैं एक वर्ग Bar
है, जो मैं नहीं करना चाहते इनपुट के रूप में स्वीकार करें। असल में, मैं चाहता हूं कि यह संकलन त्रुटि स्पॉट करने में आसान हो। समस्या यह है कि अगर मैं ऐसा करता हूं:
template <>
Bar foo<Bar>(Bar val) { static_assert(false,"uh oh..."); }
यह प्रत्येक संकलन पर विफल रहता है। मुझे https://stackoverflow.com/a/3926854/7673414 मिला, जो कहता है कि मुझे टेम्पलेट प्रकार का संदर्भ देना होगा, अन्यथा स्थैतिक जोर हमेशा होता है। समस्या यह है कि मेरे पास टेम्पलेट प्रकार नहीं है। यदि मैं करता हूं:
template< typename T >
struct always_false {
enum { value = false };
};
template <>
Bar foo<Bar>(Bar val) { static_assert(always_false<Bar>::value,"uh oh..."); }
तो यह हमेशा संकलन में विफल रहता है। क्या यह सुनिश्चित करने का कोई तरीका है कि Bar
टाइप किए गए टेम्पलेट का एक क्षण हमेशा संकलन त्रुटि का कारण बनता है?
यह अच्छा है लेकिन मैं सभी विभिन्न सी-टोर को हटाने के बजाय डी-टोर को हटा दूंगा। –
@YhezkelB। यह एक फ़ंक्शन टेम्पलेट है, क्लास टेम्पलेट नहीं। आप केवल कन्स्ट्रक्टर और विनाशकों के लिए, फ़ंक्शन टेम्पलेट विशेषज्ञता को हटा सकते हैं। –