मैं एक टेम्पलेट फ़ंक्शन लिखना चाहता हूं जो केवल 2 संख्याओं (उदाहरण के लिए 3 और 5) के साथ काम करता है और यदि आप इसे किसी अन्य नंबर के साथ उपयोग करने का प्रयास करते हैं तो त्रुटि और त्रुटि देता है।इनट्स के साथ विशेषज्ञता के बारे में, और static_assert
मैं इस तरह से यह कर सकते हैं:
template<int x>
void f();
template<>
void f<3>()
{
cout << "f<3>()\n";
}
template<>
void f<5>()
{
cout << "f<5>()\n";
}
और उसके बाद मैं इस समारोह सामान्य तरीके से कॉल कर सकते हैं:
f<3>();
f<5>();
और यह अच्छी तरह संकलित, और मैं अपने कार्य का उपयोग करने की कोशिश करता है, तो गलत:
f<10>();
संकलक मुझे एक त्रुटि देता है।
1.- इस मानक है:
मैं इस दृष्टिकोण के साथ 2 समस्या है? क्या मैं इंक के साथ एक टेम्पलेट विशेष कर सकता हूँ?
2.- यदि आप इस दृष्टिकोण का उपयोग करते हैं तो मुझे आपको जो त्रुटि मिलती है उसे पसंद नहीं है, क्योंकि त्रुटि उपयोगकर्ता को यह नहीं बताती कि उसने गलत तरीके से क्या किया है। मैं कुछ लिखना पसंद करूंगा जैसे:
template<int x>
void f()
{
static_assert(false, "You are trying to use f with the wrong numbers");
}
लेकिन यह संकलित नहीं करता है। ऐसा लगता है कि मेरा कंपाइलर (जीसीसी 5.4.0) पहले प्राथमिक टेम्पलेट को तुरंत चालू करने की कोशिश कर रहा है, और इसके कारण यह त्रुटि (static_assert का) देता है।
आपकी मदद के लिए धन्यवाद।
यदि आप सोच रहे हैं कि मैं ऐसा क्यों करना चाहता हूं क्योंकि मैं सीख रहा हूं कि माइक्रोकंट्रोलर प्रोग्राम कैसे करें। एक माइक्रोकंट्रोलर में आपके पास कुछ पिन होते हैं जो केवल कुछ चीजें करते हैं। उदाहरण के लिए, पिन 3 और 5 पिन होते हैं जिसमें आप स्क्वायर वेव उत्पन्न कर सकते हैं। एक आवेदन में मैं एक वर्ग तरंग उत्पन्न करने के लिए चाहते हैं, तो मैं इस तरह somthing लिखना चाहते हैं:
square_wave<3>(frecuency);
लेकिन, कुछ महीने बाद मैं इस कोड का पुन: उपयोग (या इसे बदलने) एक differente माइक्रोकंट्रोलर के साथ एक और आवेदन में करना चाहते हैं, मैं चाहता हूं कि मेरा कंपाइलर मुझसे कहता है: "आह, इस माइक्रोकंट्रोलर में आप पिन 3 और 5 में स्क्वायर वेव उत्पन्न नहीं कर सकते हैं। इसके बजाय, पिन 7 और 9 का उपयोग करें"। और मुझे लगता है कि यह मुझे बहुत सारे सिरदर्द बचा सकता है (या शायद नहीं, मुझे वास्तव में पता नहीं है। मैं सिर्फ एक माइक्रोक्रोनरोलर प्रोग्राम करने का तरीका सीख रहा हूं)।
"_but इस compile_ नहीं है" संकलन त्रुटि क्या है? किस परीक्षण के साथ? 'एफ <10>()' 'स्थिर जोर से संकलित नहीं होना चाहिए। – nefas
@nefas यह 'x' के _any_ मान के साथ संकलित नहीं करता है। –