C++ 模板返回

标签 c++ architecture templates composition

我有一个基于“实体”的程序,它包含“组件”(组合 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/

相关文章:

c++ - 如何从 Boost::GIL View 类型中提取 channel 类型?

c++ - 试图更好地理解 std::forward、std::move

c++ - 关于成员和自由运算符的消歧规则

javascript - 如何将javascripts发送到底部? (在 symfony 2 中)

c++ - `enable_if` 与 `enum` 模板特化问题

c++ - Visual Studio 没有为静态库构建创建 .lib 文件

C++ 碰撞检测导致对象消失

java - 构建可重用的 Wicket 组件

database - 仓库PostgreSQL数据库架构推荐

c++ - Qt 中的 O(1) 映射?