避免使用用户定义的继承类的重复构造函数

时间:2013-10-23 14:34:44

标签: c++ oop c++11 interface constructor

// Library code
struct Entity;
struct Attachment { 
    Entity& entity;
    Attachment(Entity& mEntity) : entity(mEntity) { }
};

// ---
// User code
struct MyAttachment1 : Attachment { 
    // This is annoying to write for every attachment type
    // Especially when there are other constructor arguments
    // And if there are a lot of attachment types
    MyAttachment1(Entity& mEntity) : Attachment{mEntity} { }
};
struct MyAttachment2 : Attachment { 
    MyAttachment2(Entity& mEntity) : Attachment{mEntity} { }
};
// ...

从代码示例中可以看出,从Attachment派生的每个类型都需要定义一个重复构造函数,其中Entity&被传递给基类构造函数。

这不是问题,但在我的项目中,我处理40-50个附件,并且它们在构造函数中也有自己的参数。

似乎没有必要明确地将Entity&作为第一个参数传递。

我发现的一种解决方法是使用用户覆盖的virtual void Attachment::init()方法,并在Entity添加Attachment后由virtual调用。但是,这会使用不必要的{{1}}调用,仍然需要用户处理样板代码。

有更优雅的方式来解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

没有。写它没有更优雅的方式。我甚至无法理解在编写类构造函数时如何键入Attachment{mEntity}可能被视为一件苦差事。我的意思是,无论如何,你正在写一整节课。如果这样麻烦,请在文本编辑器中创建一个宏。

答案 1 :(得分:0)

不确定它是否有帮助,但在C ++ 11中你也可以做到

struct MyAttachment1 : Attachment { 
    // Note, this imports ALL of the base constructors, you can't 
    // pick and choose
    using Attachment::Attachment;

};

请参阅https://ideone.com/fceV4k