如何使用初始化列表调用显式模板构造函数
问题:
可以显式模板使用初始值设定项列表调用构造函数,如下所示例如?
struct T { template<class> T(); }; struct U { U() : t<void>() {} //does not work T t; };
答案:
不幸的是,不可能使用初始值设定项列表显式调用模板构造函数。
根据 C标准位于 14.8.1/7,“[...] 因为转换成员函数模板和构造函数成员函数模板在不使用函数名,无法为这些函数模板提供显式模板参数列表。”
这意味着缺少自己名称的构造函数无法显式接受模板参数。在您的情况下,编译器将 t
要解决此问题,您可以采用解决方法:
struct T { template<class U> T(identity<U>); }; struct U { U() : t(identity<void>()) {} T t; };
这里,identity 充当模板参数的占位符。在 C 20 中,您可以使用 std::type_identity 作为身份类型。
以上是可以使用初始化列表调用显式模板构造函数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!