0
// 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需要定义一个重复的构造函数,其中将 anEntity&传递给基类构造函数。

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

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

我发现的一种解决方法是使用用户覆盖的方法,并且在添加an 之后virtual void Attachment::init()调用该方法。但是,这使用了不必要的调用,并且仍然需要用户处理样板代码。EntityAttachmentvirtual

有没有更优雅的方法来处理这个问题?

4

2 回答 2

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

于 2013-10-23T15:00:19.570 回答
0

不,没有更优雅的方式来编写它。我什至无法理解Attachment{mEntity}在编写类构造函数时打字是如何被认为是一件苦差事。我的意思是,不管怎样,你正在写一整堂课。如果这很麻烦,请在您的文本编辑器中创建一个宏。

于 2013-10-23T14:57:19.670 回答