C++ 类模板中嵌套类模板的显式专门化
这是我无法修复的最小代码:C++ 类模板中嵌套类模板的显式专门化,c++,templates,template-specialization,nested-class,C++,Templates,Template Specialization,Nested Class,这是我无法修复的最小代码: template<typename T> class A { template<typename S> class B{ }; template<> class B<int> { }; }; 模板 甲级{ 模板 B类{ }; 模板 B类{ }; }; 当我编译时,我得到 error: explicit specialization in non-namespace
template<typename T>
class A {
template<typename S>
class B{
};
template<>
class B<int> {
};
};
模板
甲级{
模板
B类{
};
模板
B类{
};
};
当我编译时,我得到
error: explicit specialization in non-namespace scope 'class A<T>'
错误:非命名空间范围“class A”中的显式专门化
我做错了什么?我怎样才能解决这个问题
编辑:我已经看到了一些其他答案,但根据他们的建议,我应该这样做:
template<typename T>
class A {
template<typename S>
class B{
};
};
template<typename T>
class A<T>::B<int> {
};
模板
甲级{
模板
B类{
};
};
模板
A类::B类{
};
<>但是这也不管用…… 不幸的是,这个部分特化是无效的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>;
};
名称空间Imp{
模板类B{};
模板类B{};
}
模板类别A{
公众:
使用B=Imp::B的模板;
};
否,不能专门化嵌套模板