C++ : Automatically run function when derived class is constructed

标签 c++ inheritance constructor virtual

所以我最近不小心从基类的构造函数中调用了一些虚函数,即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/

相关文章:

Swift 从父类(super class)调用子类的重写方法

c# - 有没有办法从具有内部构造函数的类派生?

c++ - 通过两个隐式构造函数构造一个值?

javascript - 如何将使用按钮创建的对象添加到表中?

c++ - Visual C++ 链接器崩溃 (VS2008 SP1)

python - 使具体类抽象,保留构造函数

asp.net-mvc - 在 MVC 中,局部 View 会继承其父 View 的模型吗?

c++ - 我应该使用哪种数据类型?

类和子类中的 C++ 成员函数指针

c++ - 无法调试到源代码