类模板中嵌套类模板的显式特化

时间:2014-11-26 12:06:20

标签: c++ templates template-specialization nested-class

这是我无法解决的最小代码:

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> {

};

但这也不起作用......

1 个答案:

答案 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>;
};