Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类模板中嵌套类模板的显式专门化_C++_Templates_Template Specialization_Nested Class - Fatal编程技术网

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的模板;
};

否,不能专门化嵌套模板