如何一般地获取某个类型的向量的所有项

时间:2019-09-10 10:02:14

标签: c++ vector function-templates

我有一个包含Entity类型项目的向量。实体是一个抽象类。该向量包含Ball和Paddle类的实例。

以下作品。

std::vector<Entity*>* Level::getEntities()
{
  return &this->entities;
}
for(auto entity : *Engine::getLevel()->getEntities())
{
  Paddle* paddle = dynamic_cast<Paddle*>(entity);
  if(paddle)
  {
    //It's a paddle!
  }
}

因为我需要多次执行此操作,所以我希望有一个功能可以为我执行此操作。我尝试了以下方法:

在我的标题中:

template<class T>
std::vector<T*>* getEntities();

实际功能:

template<class T>
std::vector<T*>* Level::getEntities()
{
  std::vector<T*> entitiesOfType;

  for(auto entity : entities)
  {
    T* entityT = dynamic_cast<T*>(entity);
    if(entityT) entitiesOfType.push_back(entityT);
  }

  return &entitiesOfType;
}

现在我想我将可以使用如下功能:

for(Paddle* paddle : *Engine::getLevel()->getEntities<Paddle>())
{
  //Only iterating over entities of the type paddle
}

但是出现以下链接器错误:

/ usr / bin / ld:obj / Ball.o:在函数Ball :: paddleCollision()'中: Ball.cpp :(。text + 0x674):对`std :: vector> * Level :: getEntities()'的未定义引用 collect2:错误:ld返回1退出状态 make:*** [Makefile:8:bin / Pong]错误1

0 个答案:

没有答案