将类构造函数作为模板参数传递

时间:2017-12-31 13:28:55

标签: c++ templates constructor

我尝试使用mixin创建基于组件的实体。要定义实体,我有一个模板类,将所有组件作为模板参数:

Document doc = new Document();
     DocumentBuilder builder = new DocumentBuilder(doc);     
     Aspose.Words.Style style = doc.Styles.Add(StyleType.Paragraph, "newStyle");
     style.IsQuickStyle = true;
     style.Font.Size = 24;
     style.Font.SizeBi= 24;
     style.Font.Name = "B Mitra";
     style.Font.NameBi= "B Mitra";

 builder.ParagraphFormat.Style = style;  
    builder.Writeln("سلام");

要定义新实体,我只需创建一个typedef:

template<typename Mixin>
struct EntityFactoy : Mixin, Entity
{
    void preUpdate(float dt)
    {Mixin::mixinPreUpdate(dt);}
    void update(float dt)
    {Mixin::mixinUpdate(dt);}
    void lateUpdate(float dt)
    {Mixin::mixinLateUpdate(dt);}
};

现在我想将构造函数传递给此模板,因此实体可以初始化它的组件。

using MyEntity = EntityFactory<Component1<Component2<ComponentN<>>>>;

我尝试了一些事情,例如传递一个可变参数模板,甚至切换到一个丑陋的宏,但它们都没有像我想的那样工作。请注意,mixins都有默认构造函数。

编辑:

我尝试使用可变参数模板,但我仍然不知道如何在那里实现:

x = Entity1(3, 2.2f, "string");
y = Entity2("string", &x);

或以某种方式将函数作为模板传递:

template<typename Mixin, typename CtrArgs>
struct EntityFactory : Mixin, Entity
{
    EntityFactory(CtrArgs&&... args)
    {
        //Define this via a template parameter
    }
    void preUpdate(float dt)
    {Mixin::mixinPreUpdate(dt);}
    void update(float dt)
    {Mixin::mixinUpdate(dt);}
    void lateUpdate(float dt)
    {Mixin::mixinLateUpdate(dt);}
};

宏是唯一的方法吗?

0 个答案:

没有答案