如何将派生类型视为其基本类型?

时间:2019-06-30 12:32:35

标签: c++ inheritance

我想知道是否有可能将类视为其基本类型。我在下面做了一个小例子来说明我的意思。
我使用在示例中未使用的Vector2类,但是它仅包含类型为x的{​​{1}}和y值。
我正在尝试使称为float的方法与类FindEntitiesWithPositionPerson一起使用,但是出现错误Vechicle。如何使此代码起作用?

E0312 no suitable user-defiend conversion from "std::vector<Person, std::allocator<Person>>" to "const std::vector<Entity, std::allocator<Entity>>" exists

2 个答案:

答案 0 :(得分:4)

template符合您的要求。
我建议像这样。

template<typename T>
std::vector<T>
FindEntitiesAtPosition(const std::vector<T> &entities,
                       Vector2 position)
{
  std::vector<T> result;
  for(const auto &e: entities)
  {
    if(e.position == position)
    {
      result.emplace_back(e);
    }
  }
  return result;
}

顺便说一句,当通过entities并在range-for循环中时,请注意不需要的副本。

答案 1 :(得分:4)

您可以将派生类的对象视为基类的对象。怎么样?您可以将对派生类的对象的指针或引用转换为对基类的对象的指针或引用,然后继续使用转换后的指针或引用。这种转换是隐式的,因此它是从(单个)派生对象到其基础对象的无缝过渡。它也可以与智能指针一起使用。

在这里,事情不再变得美好。您不能将派生类的对象的向量(列表,集合,向量的向量,束等)视为对象的向量(列表,集合,向量的向量,束等)基类。错误消息只是告诉您。