Предположим, что у меня есть следующие определения классовУсловно наследуют от чистого базового класса
struct base {
virtual int f() = 0;
};
struct A: public base {
int f() final { return 1; }
};
struct B: public base {
int f() final { return 2; }
};
Можно ли превратить A
и B
в шаблоны, которые принимают параметр bool
, который определяет, следует ли наследовать от base
или нет? У меня есть случаи использования, которые выполняют или не требуют базового класса, обеспечивающего общий интерфейс.
Предположим, что A
и B
имеют множество функций-членов, поэтому дублирование реализации было бы утомительным. Но sizeof(A)
и sizeof(B)
являются маленькими.
Вам нужны две версии? Предполагая, что 'base' содержит только абстрактные функции, не должно быть никаких затрат времени исполнения. В вашем примере ваш оптимизатор должен видеть, что любой 'A' будет использовать' f() 'оттуда, так как это' final'. – Guvante
@Guvante: он делает тип полиморфным, что дает ему vtable. Не стоимость исполнения, но тем не менее стоимость. – ildjarn
@Guvante Размер наследуемого типа больше размера указателя, который указывает на таблицу vtable. – SU3