पर आधारित विभिन्न विधियों का पालन करें क्या टेम्पलेट में पास किए गए चर के प्रकार को निर्धारित करने का कोई तरीका है और यदि यह int
या std::string
आदि पर आधारित फ़ंक्शन को कॉल करने का कोई तरीका है ...?टेम्पलेट वैरिएबल प्रकार
उदाहरण
template <class T>
struct Jam
{
Jam(T *var)
{
if (typeid(var) == typeid(std::string*)
*var = "Hello!";
else if (typeid(var) == typeid(int*)
*var = 25;
}
};
के लिए जब मैं उस कोड का उपयोग करने का प्रयास करें, मैं एक त्रुटि invalid conversion from const char* to int
मिलता है। मुझे संदेह है क्योंकि यह संकलक टेम्पलेट को अलग-अलग कार्यों में "विस्तारित करता है" और जब मैंने संरचना throw Jam<std::string>(&setme);
संरचना का एक नया उदाहरण निर्दिष्ट किया, तो यह var* = 25
कथन का पता चला और संकलन करने से इंकार कर दिया।
क्या ऐसा करने का कोई उचित तरीका है? शायद मैक्रो गार्ड के साथ? धन्यवाद।
उदाहरण के लिए अन्य विकल्प हैं, उदाहरण के लिए केवल कन्स्ट्रक्टर ('टेम्पलेट <> जाम :: जाम (int * var) {}' टेम्पलेट क्लास परिभाषा के बाहर) या कोड के आधार पर सक्षम/अक्षम करने के लिए अधिक जटिल SFINAE टेम्पलेट तर्कों पर ... मुझे नहीं लगता कि यह इस साधारण समस्या में समझ में आता है, लेकिन यह समझ में आ सकता है जब ये सरल समाधान बोझ बन जाते हैं (कहें कि कन्स्ट्रक्टर ने 100 चीजें की हैं, जिनमें से केवल एक प्रकार पर निर्भर है , या कि 100 अन्य सदस्य कार्य थे और पूरे प्रकार का विशेषज्ञता महंगा होगा) –