मैं नीचे की तरह एक फ़ंक्शन टेम्पलेट को कॉल करना चाहता हूं:
#include <iostream>
#include <type_traits>
#include <typeinfo>
using namespace std;
struct size1 { size1() {std::cout << "Caling 1 \n";}};
struct size2 { size2() {std::cout << "Caling 2 \n";}};
template <typename T, typename std::conditional_t<sizeof(T) == 4, size1, size2> U>
void afficher(T a)
{
std::cout << typeid(U).name();
}
int main(int argc, char *argv[])
{
afficher(10); //Error can't deduct U
}
मुझे लगता है कि यहां मेरे पास एक गैर-कटौती योग्य संदर्भ है, मैं इसे कैसे ठीक कर सकता हूं और
क्या यहां उपयोगकर्ता std::conditional के लिए ठीक है या std::enable_if का उपयोग करें?
धन्यवाद।
1 उत्तर
आपके पास सिंटैक्स समस्या है, और कुछ नहीं:
template <typename T, typename U = std::conditional_t<sizeof(T) == 4, size1, size2>>
void afficher(T a) // ^^^^
{
std::cout << typeid(U).name();
}
जैसा कि टिप्पणियों में Jarod42 द्वारा नोट किया गया है, यह उपयोगकर्ताओं को आपके इरादे को बायपास करने और दूसरे तर्क के साथ कुछ भी करने की अनुमति देता है। आप इसके बजाय टाइपिफ़ का उपयोग कर सकते हैं:
template <typename T>
void afficher(T a)
{
using U = std::conditional_t<sizeof(T) == 4, size1, size2>>;
std::cout << typeid(U).name();
}
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।