如何解决C ++:嵌套模板类错误“在非命名空间范围内显式专门化”
|| 如下代码:template <class T1>
struct A1
{
template <int INDEX>
struct A2 { /* ... */ };
template <>
struct A2<-1> { /* ... */ };
};
int main()
{
A1<int>::A2<-1> x;
}
给出此错误:
prog.cpp:7:13:错误:非命名空间范围ѭ1中的显式专业化
prog.cpp:8:10:错误:模板参数未在部分专业化中使用:
prog.cpp:8:10:错误:\'T1\'
我如何最好地解决此错误?我尝试了这个:
template <class T1>
struct A1
{
template <int INDEX,class DUMMY = void>
struct A2 { /* ... */ };
template <class DUMMY>
struct A2<-1,DUMMY> { /* ... */ };
};
int main()
{
A1<int>::A2<-1> x;
}
似乎可行,但似乎有些忽悠。
有更好的解决方法吗?
我已经看过以前的答案,只能在类中找到具有函数的类,而在类中找不到。我还在其他答案中找到了“ DUMMY”技巧,但想知道是否有更好的解决方案。
另外,作为附带说明,C ++ 0x允许使用第一个代码吗?
解决方法
在不专门化ѭ5的情况下,不允许显式地专门化
A2
(第14.7.3 / 18节)。 C ++ 0x具有相同的限制(n3242§14.7.3/ 16)。同时,允许嵌套类的部分专业化。因此,使用虚拟类的技巧是可以的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。