我有一个基于“实体”的程序,它包含“组件”(组合 FTW)。
组件可能包括许多不同的类型,包括脚本、 Assets 等。我想构建一个名为
的实体函数实体有一个字符串映射和实际组件,这样就可以按类型名称搜索组件。
我想要一个函数叫做
<Component T>GetComponent(char* TypeName, <T>);
它接受一个字符串和一个类型名称,并返回所请求的类型化组件。
是否可以使用 C++ 模板做这样的事情?以上显然行不通,我不确定该怎么做。
谢谢
编辑:
我不是在找工厂。
实体包含不同类型组件的实例。目前这是通过
std::vector<Component> componentList;
和一个
std::vector<char*> componentNames;
保证其索引相同。可能我稍后会写一个合适的 map 。
我只是希望 GetComponent 返回一个正确类型的引用,指向 ComponentList 中 Entity 持有的类型名称的已实例化组件。
最佳答案
您的函数是否创建组件?那么它就是一个工厂。您可以将其包装在该模板中,以便为客户节省(可能是错误的)转换。
函数模板的类型如下所示:
template< typename T >
T* GetComponent(const char*); // presuming it returns a pointer
它会这样称呼:
Foo* foo = GetComponent<Foo>("foo");
关于C++ 模板返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1698010/