如何解决类局部特殊化定义中不同类型名称顺序之间是否有区别?
代码显示如下
template<typename t1,typename t2,typename t3>
class Test {
};
将类型名称t1指定为bool时,存在两种局部专用化
// 1
template<typename t5,typename t6>
class Test<bool,t5,t6> {
public:
t5 n1;
t6 n2;
};
// 2
template<typename t5,t6,t5> {
public:
t5 n1;
t6 n2;
};
似乎两者都工作相同,在类局部特殊化定义中,不同类型名顺序之间是否有区别?
解决方法
这两个专业是不同的。使用Test<bool,X,Y> t
,专业化(1)的类型为t.n1
的{{1}},专业化(2)的类型为X
的{{1}}。 Demo
通过交换t.n1
和Y
所使用的类型参数,同时在n1
之后的列表中交换它们,您当然可以轻松解决。列表中n2
之后的名称顺序对于专业化而言无关紧要。
感谢@Igor Tandetnik的答案,它可以帮助我弄清楚类型Test
的类型如何匹配
template<typename t1,typename t2,typename t3>
class Test {
};
template<typename t2,typename t3>
class Test<bool,t3,t2> { // 1
public:
t2 n1;
t3 n2;
};
当我们定义变量Test<bool,int,double> t
时,它将转到1
,然后将t3
指定为int
,将t2
指定为double
>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。