模板类的内部类可以是非模板类吗?

时间:2011-07-19 21:45:30

标签: c++ templates inner-classes

我正在创建一个带有内部实用程序类的模板类。模板的所有特化都需要相同的内部类:

template<...> class Outer {
    class Inner { };
};

这给了我Outer<...>::Inner但我希望所有Inner都是同一类型,就好像我刚刚写的那样:

class Inner { };
template <...> class Outer { };

Outer根本不是模板类:

class Outer {
    class Inner { };
};

给我Outer::Inner。如果可能的话,我希望Outer::Inner能够为所有Outer<>工作(仅出于命名空间/清晰度原因)。否则我当然可以移出Inner

3 个答案:

答案 0 :(得分:15)

嵌套类可以是非模板,但模板的每个实例化都有自己的嵌套类,因为它们是(否则)不相关的类型。你可以做到

namespace detail {

class Inner {};

} // detail

template<...>
class Outer {
    typedef detail::Inner Inner;
};

答案 1 :(得分:13)

我过去做过这种方式的方法是使用继承:

class DummyBase{
protected:
    class Inner{
        //etc...
    };
};

template<...> class Outer : public DummyBase{
    //etc...
};

答案 2 :(得分:0)

对于Outer的每个实例,它都是唯一的。即,

Outer<int>::Inner will be a different type from Outer<double>::Inner