如何解决typename 参数包和自动参数包的区别?
假设我有这两个定义。
template<typename... Ts>
struct S{};
template<auto... Ts>
struct S{};
这两个定义有什么区别?
我们什么时候应该选择一种或另一种?
解决方法
它们有不同的用途,前者允许
S<int,char,float> s;
后者(仅自 C++17 起可用)允许
S<42,'*',42U> s;
,
模板有 3 种parameters:
- 模板类型参数
- 模板非类型参数
- 模板模板参数
template<typename... Ts>
struct S{};
这里的 Ts
是一组 type 参数。它接受数据类型,就像在 S<int,long>
中一样。
template<auto... Ts>
struct S{};
这里的 Ts
是一组 非类型 参数,带有 placeholder 类型。它接受值,就像在 S<12,34L>
中一样。
auto
允许混合不同类型的值。
template<int... Ts>
struct S{};
这很相似,但所有值都是固定类型 int
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。