यह ज्ञात है कि टेम्पलेट तर्क सदस्य कार्यों के लिए पॉइंटर्स हो सकते हैं।सदस्य फ़ंक्शन पॉइंटर्स के लिए टेम्पलेट तर्क कटौती
तो मैं लिख सकते हैं:
struct Bar
{
int fun(float x);
};
template <int (Bar::*FUN)(float)>
struct Foo
{ /*...*/ };
typedef Foo<&Bar::fun> FooBar;
लेकिन क्या होगा अगर मैं Bar
प्रकार अपने आप में एक टेम्पलेट तर्क होना चाहते हैं:
template <typename B, int (B::*FUN)(float)>
struct Foo
{ /*...*/ };
typedef Foo<Bar, &Bar::fun> FooBar;
अब, जब मैं इसे इस्तेमाल करते हैं, मैं लिखने के लिए है Bar
दो बार!
मेरा प्रश्न है: क्या संकलक को कक्षा प्रकार को स्वचालित रूप से कम करने के लिए मजबूर करने का कोई तरीका है?
उद्देश्य सिर्फ काम करने के लिए इस के लिए है:
typedef Foo<&Bar::fun> FooBar;
typedef Foo<&Moo::fun> FooMoo;
अंतर्दृष्टि के लिए धन्यवाद, असल में, मैं इसके लिए बदसूरत मैक्रोज़ का उपयोग कर रहा हूं (यह एक पुस्तकालय के लिए एक टेम्पलेट आंतरिक है, इसलिए दुरुपयोग का कोई वास्तविक खतरा नहीं है)। वैसे भी, 'member_ptr_traits' बहुत अच्छा है क्योंकि मुझे वास्तव में 'टी' प्रकार की आवश्यकता है। – rodrigo