2011-09-22 10 views
5

इसे समझने के लिए:ऑब्जेक्ट प्रकार टेम्पलेट तर्क होने पर किसी ऑब्जेक्ट पर किसी फ़ंक्शन पर टेम्पलेट तर्कों को पास करने का कोई तरीका है?

struct MyFunc { 

    template <size_t N> 
    void doIt() { 
     cout << N << endl; 
    } 

}; 

template <typename Func> 
struct Pass123ToTemplateFunc { 

    static void pass(Func f) { 
     f.doIt<123>(); // <-- Error on compile; is there a way to express this? 
    } 

}; 

int main() { 

    Pass123ToTemplateFunc<MyFunc>::pass(MyFunc()); 

    return 0; 

} 

यह काफी विशुद्ध रूप से एक वाक्य रचना जिज्ञासा है, क्या doIt फ़ंक्शन में तर्क पारित किए बिना इसे व्यक्त करने के लिए भाषा में कोई तरीका है? यदि नहीं, तो यह कोई बड़ा सौदा नहीं है और मैं पहले से ही इस बारे में अच्छी तरह से जानता हूं कि मैं इसके आसपास काम कर सकता हूं, इसलिए वैकल्पिक समाधान प्रदान करने की कोई आवश्यकता नहीं है। (मैं स्वीकार करेंगे "नहीं" एक जवाब, दूसरे शब्दों में, यह है कि अगर सच है :-P के रूप में।)

उत्तर

8

आप संकलक कि doIt एक टेम्पलेट हो जाएगा बताने के लिए है:

f.template doIt<123>(); 
+1

यह अविश्वसनीय है उस कीवर्ड का उपयोग कितनी बार मुझ पर छेड़छाड़ करता है। धन्यवाद! – nonoitall

+0

@nonoitall: अधिक जानकारी के लिए, यह FAQ देखें: ['-> टेम्पलेट ','। टेम्पलेट' और ':: टेम्पलेट' वाक्यविन्यास क्या है?] (Http://www.comeaucomputing.com/techtalk/templates/# templateprefix) – ildjarn

संबंधित मुद्दे