2011-02-05 15 views
12

मैं जब निम्नलिखितमेरा कंपाइलर "टी एंड ..." की अनुमति देता है। क्या यह एक विस्तार है?

template<typename T> 
void f(T &...); 

काम किया हैरान था मैंने सोचा कि मैं के रूप में "typename ... टी" "टी" घोषित करने के लिए तो है, और यह केवल C++ 0x में काम करता है। लेकिन ऊपर सख्त सी ++ 03 मोड में संकलित। क्या चल रहा है?

उत्तर

20

यह सिर्फ पुराना सी varargs वाक्यविन्यास है; व्याकरण अल्पविराम को छोड़ने की अनुमति देता है। निम्नलिखित समकक्ष हैं:

int printf(const char* fmt, ...); 
int printf(const char* fmt...); 
+4

सी ओ आर आर ई सी टी! –

3

क्या आपने फ़ंक्शन को कॉल किया था? जब तक आप उन्हें कॉल नहीं करते हैं तब तक टेम्पलेट फ़ंक्शंस संकलित नहीं होते हैं। और विजुअल स्टूडियो 2010 में, IntelliSense पता चलता है कि समारोह के वास्तविक वाक्य रचना होगा

template <class T> void f(T&, ...) 

वर्ष चर तर्क वाक्य रचना की तरह खुशबू।