2011-08-07 30 views
7

क्या सी ++ 0x है (या समय में किसी बिंदु पर सी ++ 0x था) कन्स्ट्रक्टर के लिए टेम्पलेट तर्क कटौती?रचनाकारों के लिए टेम्पलेट तर्क कटौती

std::lock_guard l(m); // at 7:00 

std::thread t(f);  // at 9:00 

इसका मतलब यह है कि सौंपने make_foo समारोह टेम्पलेट्स अंत में अनावश्यक हैं: An Overview of the Coming C++ (C++0x) Standard में, मैं निम्नलिखित लाइनों देखा था?

+1

ओह रुको, मुझे लगता है कि मैंने कक्षाओं के कन्स्ट्रक्टर टेम्पलेट्स के साथ कक्षा टेम्पलेट्स के रचनाकारों को भ्रमित कर दिया है ... अभी भी एक दिलचस्प सवाल है, मेथिंक। – fredoverflow

उत्तर

14

टेम्पलेट तर्क कटौती कन्स्ट्रक्टर समेत किसी भी फ़ंक्शन के लिए काम करती है। लेकिन आप कन्स्ट्रक्टर को पास किए गए तर्कों से वर्ग टेम्पलेट पैरामीटर को कम नहीं कर सकते हैं। और नहीं, आप इसे सी ++ 0x में भी नहीं कर सकते हैं।

struct X 
{ 
    template <class T> X(T x) {} 
}; 

template <class T> 
struct Y 
{ 
    Y(T y) {} 
}; 

int main() 
{ 
    X x(3); //T is deduced to be int. OK in C++03 and C++0x; 
    Y y(3); //compiler error: missing template argument list. Error in 03 and 0x 
} 

lock_guard और thread वर्ग टेम्पलेट्स नहीं हैं। हालांकि उनके पास कन्स्ट्रक्टर टेम्पलेट्स हैं।

+0

आपकी पोस्ट 2011 में थी, लेकिन थोड़ी सी अपडेट करने के लिए सी ++ 1y को जल्द ही यह होना चाहिए: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3836.html देखो पृष्ठ पर कागज N3602 पर (http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3602.html)। – daminetreg

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