क्या कोई तरीका है, SFINAE का उपयोग करके, यह पता लगाने के लिए कि किसी दिए गए वर्ग के लिए एक नि: शुल्क फ़ंक्शन ओवरलोड किया गया है या नहीं?SFINAE: पता लगाएं कि कक्षा में नि: शुल्क फ़ंक्शन
असल में, मैं निम्नलिखित समाधान मिल गया है:
struct has_no_f { };
struct has_f { };
void f(has_f const& x) { }
template <typename T>
enable_if<has_function<T, f>::value, int>::type call(T const&) {
std::cout << "has f" << std::endl;
}
template <typename T>
disable_if<has_function<T, f>::value, int>::type call(T const&) {
std::cout << "has no f" << std::endl;
}
int main() {
call(has_no_f()); // "has no f"
call(has_f()); // "has f"
}
सीधे शब्दों में call
अधिक भार वहाँ वास्तव में foo
और bar
प्रकार के एक बहुत हैं और call
समारोह उनमें से कोई ज्ञान नहीं है के बाद से काम नहीं करता है (मूल रूप से call
एक के अंदर है और उपयोगकर्ता अपने स्वयं के प्रकार की आपूर्ति करते हैं)।
मैं सी ++ 0x का उपयोग नहीं कर सकता, और मुझे सभी आधुनिक कंपाइलरों के लिए एक समाधान समाधान की आवश्यकता है।
नोट: similar question का समाधान दुर्भाग्यवश यहां काम नहीं करता है।
बहुत परेशानी की समस्या। मैं भी समाधान जानना चाहता हूं। –
क्या आप उन कार्यों का पता लगाना चाहते हैं जो केवल तत्काल बिंदु पर दिखाई दे रहे हैं? –
@ जोहान्स वास्तव में मेरे मामले में कोई फर्क नहीं पड़ता। तत्काल (फ़ंक्शन टेम्पलेट के) पर, सभी उम्मीदवार फ़ंक्शंस * * ज्ञात होंगे। –