Templates and generic programming
T.62
Размещайте члены шаблона класса, не зависящие от параметров шаблона, в нешаблонном базовом классе
Причина
Позволяет использовать члены базового класса без указания аргументов шаблона и без инстанцирования шаблона.
Пример
template<typename T>
class Foo {
public:
enum { v1, v2 };
// ...
};
???
struct Foo_base {
enum { v1, v2 };
// ...
};
template<typename T>
class Foo : public Foo_base {
public:
// ...
};
Примечание
Более общая версия этого правила звучит так: «Если член шаблона класса зависит только от N из M параметров шаблона, разместите его в базовом классе только с N параметрами». При N == 1 мы можем выбрать между базовым классом и классом в объемлющей области видимости, как в T.61.
??? Что насчёт констант? Статических членов класса?
Контроль
- Помечать ???