2011-08-07 26 views
7

Kurucular için şablon argümanı indirimi C++ 0x (yoksa zaman içerisinde bir noktada C++ 0x oldu mu)? yapıcılar için şablon argüman indirimi

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

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

bu devrederek make_foo fonksiyon şablonları nihayet gereksiz olduğu anlamına mı: An Overview of the Coming C++ (C++0x) Standard, ben aşağıdaki satırları gördü?

+1

Oh, sanırım, sınıf şablonları yapıcıları sınıfların kurucu şablonları ile karıştırdım sanırım ... hala ilginç bir soru, metreler. – fredoverflow

cevap

14

Şablon bağımsız değişkeni, kurucu dahil olmak üzere herhangi bir işlev için çalışır. Ancak sınıf şablon parametrelerini yapıcıya iletilen argümanlardan çıkaramazsınız. Ve hayır, C++ 0x'da da yapamazsınız.

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 ve thread sınıf şablonları değildir. Yine de kurucu şablonları var.

+0

Gönderiniz 2011'de oldu, ancak biraz güncellemek için C++ 1y'nin yakında olması gerekiyor: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3836.html sayfadaki N3602 sayfasında (http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3602.html). – daminetreg

İlgili konular