将继承的参数传递给基类构造函数,然后在派生类构造函数中做一些事情

Sim*_*mon 3 c++ c++11

考虑以下:

Child从另一个类派生一个类ParentParent有大量重载的构造函数。本Child类并不需要任何建造更多的参数。但是一旦调用了基类构造函数,我想在对象构造过程中做更多的事情。

所以我的问题是:使用现代 C++,我可以编写一个构造函数来接受任何重载基类构造函数接受的所有参数并将它们转发给相应的参数吗?

明确地说:我知道using Parent::Parent语法,但据我所知,这不会让我有机会在调用基类构造函数后做任何事情。

我已经在 SO 和互联网的深处搜索过这里,但我找不到任何类似的东西,尽管这对我来说似乎是一个相当普遍的用例。任何帮助将非常感激。

Nat*_*ica 8

一种方法是在派生类中创建一个可变参数模板构造函数,将其所有参数传递给基类。然后你可以在那个构造函数的主体中做任何你想做的额外的事情。那看起来像

struct Base
{
    Base (int) {}
    Base(int, int) {}
    //...
};

struct Derived : Base
{
    template<typename... Args>
    Derived(Args&&... args) : Base(std::forward<Args>(args)...) // <- forward all arguments to the base class
    {
        // additional stuff here
    }
};
Run Code Online (Sandbox Code Playgroud)

  • 如果“Base”同时具有显式和非显式构造函数,则可以有条件地“显式”。 (2认同)