// 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}}调用,仍然需要用户处理样板代码。
有更优雅的方式来解决这个问题吗?
答案 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;
};