C ++调用显式模板构造函数

你能告诉我如何显式调用模板构造函数(在初始化程序列表中)? 例如:

struct T { template<class> T(); }; struct U { U() : t<void>() {} //does not work T t; }; 

谢谢

这是不可能的。 该标准在14.8.1/7还有一个注释

[注意:因为显式模板参数列表在函数模板名称之后,并且因为转换成员函数模板和构造函数成员函数模板在不使用函数名称的情况下被调用,所以没有办法为这些函数模板提供显式模板参数列表。 ]

如果你能忍受它,你可以解决它

 struct T { template<class U> T(identity<U>); }; struct U { U() : t(identity<void>()) {} T t; }; 

给定的identity像是在boost中定义的

 template<typename T> struct identity { typedef T type; };