У меня есть базовый класс, который я хочу выглядеть так:
class B
{
// should look like: int I() { return someConst; }
virtual int I() = 0;
public B() { something(I()); }
}
Смысл в том, чтобы заставить производные классы переопределить I
и заставить его вызываться при создании каждого объекта. Это привыкло делать некоторую бухгалтерию, и мне нужно знать, какой тип объекта создается (но я иначе рассматриваю текущий объект как базовый класс).
Это не работает, потому что C ++ не позволит вам вызывать абстрактную виртуальную функцию из конструктора.
Есть ли способ получить тот же эффект?
Исходя из этой ссылки может показаться, что ответ - нет способа получить то, что я хочу. Однако, это говорит:
Краткий ответ: нет. Базовый класс ничего не знает о том, из какого класса он получен, и это тоже хорошо. [...]
То есть объект официально не становится экземпляром Derived1, пока не начнется конструктор Derived1 :: Derived1.
Однако в моем случае я не хочу знать, что это , это , но что он станет . На самом деле, мне даже не важно, что я получу обратно, пока пользователь может (после факта) сопоставить его с классом. Так что я мог бы даже использовать что-то вроде указателя возврата и безнаказанно с этим справиться.
(теперь вернемся к чтению этой ссылки)