我有一个关于C++模板的问题。
template <class Container>
void tryTriggers(const Container& entities)
{
for (Container::const_iterator ent = std::begin(entities);ent != std::end(entities); ++ent)
{
if ((*ent)->isReadyForTriggerUpdate() && (*ent)->isAlive())
{
for (TriggerList::const_iterator trg = std::begin(_triggers);trg != std::end(_triggers); ++trg)
{
//Try(..) is a method takes *entity(entity's pointer) for parameters.
//But my container was implemented with unique_ptr.
//ex) vector<unique_ptr<entity>> v;
//So I used get() method for acquire raw pointer.
(*trg)->Try((*ent).get());
}
}
}
}
这段代码是用于一些容器的模板成员函数。
它仅适用于具有 isReadyForTriggerUpdate()
和 isAlive()
方法的类。
Try(..)
是一个方法,其参数为 *entity(实体的指针)
。
在我的情况下,我使用了 unique_ptr
容器,因此我必须使用 get()
方法来获取原始指针。
该函数不会带来任何问题,但是......如果我使用一些使用原始指针的容器,例如
vector <entity*> v;
如果这样做,就会出现问题。
问题:我希望将其更加通用,以便与原始指针和智能指针一起使用。有什么解决方法吗?
在STL中,有std::begin(con)
来解决与con.begin()
相关的迭代问题。因此,我期望有一些通用的方法,例如
std::begin(con)
针对上述问题。
auto
关键字替换TriggerList::const_iterator
,以节省打字和阅读这个巨大标识符的工作量。 - Colin Basnett