_W>Можно так, менять поля наследника до вызова контруктора? Нужно в наследнике создать битовый массив признаков из тех, от кого он отнаследован.
_W>_W>template <class Derived>
_W>class Base1
_W>{
_W>public:
_W> Base()
_W> {
_W> static_cast<Derived*>(this)->type_tag = 1;
_W> }
_W>};
_W>class Derived: public Base<Derived>
_W>{
_W>public:
_W> int type_tag;
_W>};
_W>
При вызове конструктора базового класса объект Derived еще не существует и обращение к его полям противоречит стандарту. Хотя этот код выполнится без всяких проблем, после завершения конструктора Base, сработает конструктор по умолчанию для Derived и, соответсвенно, конструктор по умолчанию для type_tag, после которого он будет равен 0.
Можно попробовать написать свой конструктор для Derived и не инициализировать type_tag:
// Грязный хак:
// код для Base
class Derived: public Base<Derived>
{
public:
Derived() {} // отсутсвует инициализация type_tag;
int type_tag;
};
The last good thing written in C was Franz Schubert's Symphony No. 9.