【发布时间】:2016-01-04 22:45:22
【问题描述】:
我正在寻找安全使用此类代码的正确方法:
renderer->renderEntity(entityManager->getEntity("player"));
Entity EntityManager::getEntity(string entityName)
{
for (int index = 0; index < entityVector.size(); ++index)
{
if (entityVector[index].getName() == entityName)
{
return entityVector[index];
}
}
}
您希望从类实例中的容器中获取对象,并希望检查它是否存在,因此您不会调用不存在的对象。
我知道我可以将调用更改为:
if (entityManager->getEntity("player" != nullptr)
{
renderer->renderEntity("player");
}
我想避免双重调用来检查对象是否存在。我想这可能更像是一个设计而不是语法问题。我可以将错误检查构建到包含 for 循环的 getEntity() 函数中吗?我不确定,因为返回值是实体,所以必须返回一个实体对象。 (如果是指针也一样,这不是我项目中的代码,只是一个类似的例子)。
【问题讨论】:
-
同名实体不存在的情况有多普遍?如果这种情况很少发生,您可以抛出异常。另一种选择是采用标准库方法并将迭代器返回到元素,如果不存在则返回到
entityVector.end()
。 -
如果实体不存在,你的方法应该返回什么?
-
我建议使用
std::map
-
您可以创建一个默认对象,如果该项目不存在则返回该对象;该对象可能有一些良性行为,或者它可能有一个方法告诉你它不是真实的,或者它可能为每个方法抛出一个异常。
-
您可以将
renderEntity
更改为renderEntityIfExists
并在传入错误实体时返回
标签: c++ oop for-loop error-handling