【问题标题】:Explicit specialization of nested class template in class template [duplicate]类模板中嵌套类模板的显式特化[重复]
【发布时间】:2014-11-26 12:06:19
【问题描述】:

这是我无法修复的最小代码:

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

};

但这也不行……

【问题讨论】:

  • 不,你不能专门化嵌套模板

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


【解决方案1】:

很遗憾,这种部分特化是无效的 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>;
};

【讨论】:

    猜你喜欢
    • 2018-11-26
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    相关资源
    最近更新 更多