std::enable_if
में गैर-प्रकार टेम्पलेट पैरामीटर तुलना का उपयोग करने के बारे में आप कैसे जाएंगे? मैं यह नहीं समझ सकता कि इसे फिर से कैसे किया जाए। (मैंने एक बार यह काम किया था, लेकिन मैंने कोड खो दिया है, इसलिए मैं इसे वापस नहीं देख सकता, और मुझे वह पद नहीं मिल रहा है जिसमें मुझे जवाब मिला है।)std :: enable_if गैर-प्रकार टेम्पलेट पैरामीटर्स
किसी भी मदद के लिए अग्रिम धन्यवाद यह विषय।
template<int Width, int Height, typename T>
class Matrix{
static
typename std::enable_if<Width == Height, Matrix<Width, Height, T>>::type
Identity(){
Matrix ret;
for (int y = 0; y < Width; y++){
elements[y][y] = T(1);
}
return ret;
}
}
संपादित करें: फिक्स्ड लापता ब्रैकेट के रूप में टिप्पणी में कहा।
मैं शायद इसके लिए 'static_assert' का उपयोग करूंगा। यह स्पष्ट त्रुटि संदेश प्रदान करता है। – chris
'static_assert' वास्तव में सही उपकरण है: 'std :: enable_if' SFINAE के लिए है, और क्लास टेम्पलेट के गैर-टेम्पलेट सदस्य के लिए कोई SFINAE संभव नहीं है। –
मैंने 'static_assert' का उपयोग करने के बारे में सोचा है, अंततः मैं इसका उपयोग कर समाप्त कर सकता हूं। लेकिन मैंने पहले यह काम किया था, और ऑटो पूर्ण होने के लाभ के साथ पहले स्थान पर गैर स्क्वायर मैट्रिस के लिए फ़ंक्शन सूचीबद्ध नहीं किया गया था। हालांकि, इस बिंदु पर बड़े पैमाने पर यह पता लगाने की कोशिश कर रहा है कि मैंने इसे एक बार 'std :: enable_if' के साथ कैसे किया था। – LostOfThought