这是我无法解决的最小代码:
template<typename T>
class A {
template<typename S>
class B{
};
template<>
class B<int> {
};
};
当我编译时,我得到了
error: explicit specialization in non-namespace scope 'class A<T>'
我做错了什么?我该如何解决这个问题?
编辑:我已经看到了其他一些答案,但根据他们的建议,我应该这样做:
template<typename T>
class A {
template<typename S>
class B{
};
};
template<typename T>
class A<T>::B<int> {
};
但这也不起作用......
答案 0 :(得分:2)
不幸的是,这种部分专业化是无效的C ++。
您可能会在示例中看到该表单,因为MSC支持它作为扩展名。
这是一种演示如何消除父类依赖性的方法:
namespace Imp {
template <typename S> class B {};
template <> class B<int> {};
}
template <typename T> class A {
public:
template <typename S> using B = Imp::B<S>;
};