首页 > 解决方案 > 从成员函数返回模板类

问题描述

我正在尝试使用 ECS 模式实现引擎,并且我希望拥有用于表示游戏内对象的实体类模板:

template<typename...components>
class entity
{
    //...
};

和管理实体生命周期的 entity_manager 类:

class entity_manager
{
public:
    template<typename...components>
    entity<components...> create_entity<components...>();
    
    bool destroy_entity(entity_id id);
    //...
}

当我尝试编译它时,我得到以下 gcc 错误:

error: expected initializer before ‘&lt;’ token
   15 |     entity<components...> create_entity<components...>();
      |                                        ^

和铿锵声:

error: function template partial specialization is not allowed
    entity<components...> create_entity<components...>();
                          ^            ~~~~~~~~~~~~~~~

我的问题是为什么它不起作用有什么可能的解决方案?

标签: c++templates

解决方案


您不会在函数声明中的函数名称之后放置模板参数列表。

简单地:

template<typename...components>
entity<components...> create_entity();

推荐阅读