मेरे पास एक क्लास ए है जिसमें टेम्पलेट पैरामीटर टी है। ऐसे मामले हैं जहां कक्षा टी फ़ंक्शन func1() प्रदान करता है और ऐसे मामले हैं जहां टी नहीं है इसे पेश नहीं करते हैं। ए में फ़ंक्शन f() को func1(), iff यह मौजूद होना चाहिए। मुझे लगता है कि बूस्ट एमपीएल के साथ यह संभव होना चाहिए, लेकिन मुझे नहीं पता कि कैसे। यहाँ कुछ छद्म कोड:बूस्ट एमपीएल: केवल एक (सदस्य) फ़ंक्शन को कॉल करें यदि यह मौजूद है
template<class T>
class A
{
void f(T param)
{
if(T::func1 is an existing function)
param.func1();
}
};
और भी बेहतर एक और को-मामला होगा:
template<class T>
class A
{
void f(T param)
{
if(T::func1 is an existing function)
param.func1();
else
cout << "func1 doesn't exist" << endl;
}
};
भले ही आप उचित स्थिति ढूंढ सकें कि कोड संकलित नहीं होगा। यदि दोनों शाखाओं को संकलित करना चाहिए, और यदि कार्य मौजूद नहीं है, तो सत्य शाखा संकलित नहीं होगी। –
टेम्पलेट विशेषज्ञता के साथ यह आवश्यक नहीं है कि दोनों भागों संकलित हों। किसी भी तरह मुझे पैरामीटर टी के साथ एक टेम्पलेट फ़ंक्शन को कॉल करना होगा और यह फ़ंक्शन एक भिन्न व्यवहार होता है जब टी ऑफर करता है या func1() प्रदान नहीं करता है। मुझे यकीन है कि बूस्ट एमपीएल इस उपयोग के मामले के लिए कुछ प्रदान करता है। मुझे नहीं पता कि इसका उपयोग कैसे किया जाए। – Heinzi
सी ++ 11 एक विकल्प है? –