所以我最近不小心从基类的构造函数中调用了一些虚函数,即Calling virtual functions inside constructors .
我意识到我不应该这样做,因为不会调用虚函数的覆盖,但是我怎样才能实现一些类似的功能呢?我的用例是我希望在构造对象时运行一个特定的函数,并且我不希望编写派生类的人不得不担心它在做什么(因为他们当然可以在它们的派生类构造函数)。但是,需要依次调用的函数恰好调用了一个虚函数,我想让派生类能够在需要时覆盖它。
但是因为调用了一个虚函数,我不能把这个函数放在基类的构造函数中并让它自动运行。所以我似乎被卡住了。
还有其他方法可以实现我想要的吗?
编辑:我碰巧使用 CRTP 从基类访问派生类中的其他方法,我可以使用它来代替构造函数中的虚函数吗?还是存在很多相同的问题?我想如果被调用的函数是静态的,它也许可以工作?
edit2:也刚刚发现了这个类似的问题:Call virtual method immediately after construction
最佳答案
如果确实需要,您可以访问工厂。
你可以这样做:
template <typename Derived, typename ... Args>
std::unique_ptr<Derived> Make(Args&&... args)
{
auto derived = std::make_unique<Derived>(std::forward<Args>(args));
derived->init(); // virtual call
return derived;
}
关于C++ : Automatically run function when derived class is constructed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35658459/