C++ : 构造派生类时自动运行函数

Ben*_*mer 5 c++ virtual inheritance constructor

所以最近不小心从一个基类的构造函数中调用了一些虚函数,即Calling virtual functions inside constructors

我意识到我不应该这样做,因为不会调用虚函数的覆盖,但是我怎样才能实现一些类似的功能?我的用例是我希望在构造对象时运行一个特定的函数,并且我不希望编写派生类的人不得不担心它在做什么(因为他们当然可以在它们的派生类构造函数)。但是,需要依次调用的函数恰好调用了一个虚函数,我希望派生类能够在需要时覆盖它。

但是因为调用了一个虚函数,我不能只是把这个函数粘在基类的构造函数中,让它以这种方式自动运行。所以我似乎被卡住了。

有没有其他方法可以实现我想要的?

编辑:我碰巧使用 CRTP 从基类访问派生类中的其他方法,我可以在构造函数中使用它而不是虚函数吗?或者是否存在同样的问题?我想如果被调用的函数是静态的,它也许可以工作?

编辑2:也刚刚发现这个类似的问题:构造后立即调用虚拟方法

Jar*_*d42 3

如果确实需要,您可以进入工厂。

你可以这样做:

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;
}
Run Code Online (Sandbox Code Playgroud)