我有一个类Entity,并且该类有一个名为componentSet的属性。这是另一个类Component的unique_ptr集合。每个组件对象都有一个名为actionStringSet的属性,一个包含字符串的集合。
我想要做的是为Entity编写一个带有字符串参数的成员函数,并返回对actionStringSet中该字符串中任何一个组件的引用。它们应该是唯一的,所以如果它不止一个,我就不需要任何特殊处理。另外,如果没有任何组件有这个字符串,我不知道该怎么办。
到目前为止我所拥有的是:
Component& Entity::get_component_for_action(std::string actionStr) {
std::cout << componentSet.size() << std::endl;
for (auto& comp : componentSet) {
std::cout << comp->name;
if (comp->actionStringSet.count(actionStr)) {
return comp;
}
}
throw;
}
如果没有找到任何内容,我将在python中执行的操作返回None。我不能在这里做到这一点,所以我的第一个是提出错误,并在所有来电者中捕获。但我很确定不应该在c ++中使用异常。
无论如何,上面的代码都不会编译,说
/home/jagoly/Projects/sqee/libsqee/logic/entity.cpp:20: error: non-const lvalue reference to type 'sq::Component' cannot bind to a value of unrelated type 'const std::unique_ptr<sq::Component, std::default_delete<sq::Component> >'
return comp;
^~~~
但是这会尝试返回指针本身。我想改变其他所有内容以期待unique_ptr,但后来我发现错误已经删除了(我假设传递指针并不是一个好主意)。
无论如何,我应该改变什么?它只是该函数中的一小部分语法,我是否需要更改我的数据类型,或者我的方法是否从根本上是错误的?
谢谢你提前:)
答案 0 :(得分:0)
您应取消引用unique_ptr
以获取对指向值的引用:
return *comp;
请注意,如果unique_ptr
释放其值,此引用将无效,因此您应该注意componentSet
元素相对于返回引用的元素的生命周期。