2011-08-07 74 views
7

C++ 0x是否(或在某个时间点是C++ 0x)具有构造函数的模板参数推导?在An Overview of the Coming C++ (C++0x) Standard,我看到了下面几行:构造函数的模板参数推导

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

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

这是否意味着委托make_foo函数模板终于多余的?

+1

哦,等等,我认为我将类模板的构造函数与类的构造函数模板混淆......仍然是一个有趣的问题,methinks。 – fredoverflow

回答

14

模板参数推导适用于任何函数,包括构造函数。但是你不能从传递给构造函数的参数中推导出类模板参数。不,你不能在 C++ 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_guardthread不是类模板。他们虽然有构造模板。

+0

您的帖子是在2011年,但要更新一点C + + 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

相关问题