Может ли внутренний класс класса шаблона быть классом без шаблона?
Я делаю класс шаблона с внутренним классом утилиты. Все специализации шаблона требуют одного и того же внутреннего класса:
template<...> class Outer {
class Inner { };
};
Это дает мне Outer<...>::Inner
, но я хочу, чтобы все Inner
были одного типа, как если бы я только что написал:
class Inner { };
template <...> class Outer { };
или если Outer
были просто не шаблоном:
class Outer {
class Inner { };
};
давая мне Outer::Inner
. Я хотел бы иметь Outer::Inner
работу для всех Outer<>
, если это возможно (только для причин пространства имен/ясности). В противном случае, конечно, я могу просто переместить Inner
.
Ответы
Ответ 1
Вложенный класс может быть не-шаблоном, но каждый экземпляр шаблона будет иметь свой собственный вложенный класс, потому что они (иначе) не связаны между собой. Вы можете сделать
namespace detail {
class Inner {};
} // detail
template<...>
class Outer {
typedef detail::Inner Inner;
};
Ответ 2
То, как я это делал в прошлом, это использовать наследование:
class DummyBase{
protected:
class Inner{
//etc...
};
};
template<...> class Outer : public DummyBase{
//etc...
};
Ответ 3
Он будет уникальным для каждого экземпляра Outer. I.e.,
Outer<int>::Inner will be a different type from Outer<double>::Inner