Cli*_*ton 25 c++ templates c++11
以下代码:
template <class T1>
struct A1
{
template <int INDEX>
struct A2 { /* ... */ };
template <>
struct A2<-1> { /* ... */ };
};
int main()
{
A1<int>::A2<-1> x;
}
Run Code Online (Sandbox Code Playgroud)
给出了这个错误:
prog.cpp:7:13:错误:非命名空间范围的显式特化
'struct A1<T1>'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;
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作,但似乎有点软糖.
有没有更好的解决方法?
我查看过以前的答案,只能在类中找到函数,而不是类中的类.我还在其他答案中找到了"DUMMY"技巧,但想知道是否有更好的解决方案.
另外,作为旁注,是C++ 0x允许的第一个代码吗?
Kir*_*sky 11
如果A2没有专门化A1(第14.7.3/18节),则不允许明确专门化.C++ 0x具有相同的限制(n3242§14.7.3/ 16).同时,允许嵌套类的部分特化.所以使用虚拟类的技巧就是Ok.
| 归档时间: |
|
| 查看次数: |
4497 次 |
| 最近记录: |