首页 > 后端开发 > C++ > 可以使用初始化列表调用显式模板构造函数吗?

可以使用初始化列表调用显式模板构造函数吗?

Mary-Kate Olsen
发布: 2024-12-02 16:56:10
原创
843 人浏览过

Can Explicit Template Constructors Be Invoked Using Initializer Lists?

如何使用初始化列表调用显式模板构造函数

问题:

可以显式模板使用初始值设定项列表调用构造函数,如下所示例如?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板