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

Ben*_*son 11 c++ templates inner-classes

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

template<...> class Outer {
    class Inner { };
};
Run Code Online (Sandbox Code Playgroud)

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

class Inner { };
template <...> class Outer { };
Run Code Online (Sandbox Code Playgroud)

或者如果Outer不是模板类:

class Outer {
    class Inner { };
};
Run Code Online (Sandbox Code Playgroud)

给我Outer::Inner.如果可能的话,我想Outer::Inner为所有人工作Outer<>(仅仅是出于命名空间/清晰度原因).当然,我可以搬出Inner去.

Luc*_*ton 15

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

namespace detail {

class Inner {};

} // detail

template<...>
class Outer {
    typedef detail::Inner Inner;
};
Run Code Online (Sandbox Code Playgroud)


Nat*_*ate 13

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

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

template<...> class Outer : public DummyBase{
    //etc...
};
Run Code Online (Sandbox Code Playgroud)

  • +1,因为这使得 `Outer&lt;&gt;::Inner` 成为一个真正的类名。所以`class Outer&lt;&gt;::Inner x;` 或`friend class Outer&lt;&gt;::Inner;` 仍然可以工作,而`typedef` 解决方案将在那里失败。 (2认同)