【发布时间】:2009-09-21 06:42:40
【问题描述】:
我有一个我希望看起来像这样的基类:
class B
{
// should look like: int I() { return someConst; }
virtual int I() = 0;
public B() { something(I()); }
}
重点是强制派生类覆盖I,并在构造每个对象时强制调用它。这习惯于做一些簿记,我需要知道正在构造什么类型的对象(但我将当前对象视为基类)。
这不起作用,因为 C++ 不允许您从构造函数调用抽象虚函数。
有没有办法达到同样的效果?
基于this link,答案似乎是没有办法得到我想要的。但是它说的是:
简短的回答是:不。基类对派生自哪个类一无所知——这也是一件好事。
[...]也就是说,直到构造函数 Derived1::Derived1 开始,对象才正式成为 Derived1 的实例。
但就我而言,我不想知道它是什么,而是会变成什么。事实上,只要用户可以(事后)将它映射到一个类,我什至不在乎我得到了什么。所以我什至可以使用返回指针之类的东西并摆脱它。
(现在回到阅读该链接)
【问题讨论】:
-
阅读:stackoverflow.com/questions/1425695/1426834。您也许可以使用 PIMPL。
标签: c++ abstract virtual-functions