专攻内在阶级

时间:2012-05-26 21:23:31

标签: c++ templates

是否可以专门化在模板类中声明的内部类?或多或少像以下示例(不起作用):

template<unsigned N>
class Outer {
    struct Inner {
        typedef int Value;
    };
    typedef typename Inner::Value Value;
};

template<>
struct Outer<0>::Inner {
    typedef float Value;
};

2 个答案:

答案 0 :(得分:3)

可以做到,但不像你想的那样。你必须专注于整个外部类型:

template<>
struct Outer<0>
{
    struct Inner {
        typedef float Value;
    };
    typedef float Value;
};

答案 1 :(得分:0)

我找到的最佳解决方案是将Inner移到外面。

template<unsigned N>
struct Inner {
    typedef int Value;
};

template<>
struct Inner<0> {
    typedef float Value;
};

template<unsigned N>
class Outer {
    typedef typename Inner<N>::Value Value;
};