【发布时间】:2016-06-10 01:35:49
【问题描述】:
所以我最近不小心从基类的构造函数中调用了一些虚函数,即Calling virtual functions inside constructors。
我意识到我不应该这样做,因为不会调用虚函数的覆盖,但是我怎样才能实现一些类似的功能呢?我的用例是我希望在构造对象时运行特定函数,并且我不希望编写派生类的人不必担心这是在做什么(因为他们当然可以在它们的派生类构造函数)。但是,需要依次调用的函数恰好调用了一个虚函数,我想让派生类能够根据需要重写它。
但是因为调用了一个虚函数,我不能把这个函数放在基类的构造函数中,然后让它自动运行。所以我似乎被困住了。
还有其他方法可以实现我想要的吗?
编辑:我碰巧正在使用 CRTP 从基类访问派生类中的其他方法,我可以在构造函数中使用它而不是虚函数吗?还是存在同样的问题?我想如果被调用的函数是静态的,也许它可以工作?
edit2:也刚刚发现了这个类似的问题:Call virtual method immediately after construction
【问题讨论】:
-
如果函数调用是构造派生类所必需的,并且是特定于该类的,听起来应该从派生类的构造函数中调用它。从技术上尚不存在的对象调用方法并不是一个好主意。
-
嗯,我要运行的函数是一种运行时验证例程,以确保他们编写的派生类符合某些要求。它需要访问虚拟功能以检查它们是否正常工作。
-
在这种情况下,像@Jarod42 这样的工厂方法可能是你最好的选择。
标签: c++ inheritance constructor virtual