我正在创建一个带有内部实用程序类的模板类。模板的所有特化都需要相同的内部类:
template<...> class Outer {
class Inner { };
};
这给了我Outer<...>::Inner
但我希望所有Inner
都是同一类型,就好像我刚刚写的那样:
class Inner { };
template <...> class Outer { };
或Outer
根本不是模板类:
class Outer {
class Inner { };
};
给我Outer::Inner
。如果可能的话,我希望Outer::Inner
能够为所有Outer<>
工作(仅出于命名空间/清晰度原因)。否则我当然可以移出Inner
。
答案 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