gpt4 book ai didi

c++ - 在需要基本类型的 std::vector 的地方传递派生类型的 std::vector

转载 作者:太空狗 更新时间:2023-10-29 20:53:56 25 4
gpt4 key购买 nike

我有一个基类:

class Member
{
....
}

和一个派生类,像这样:

class Mine_sweeper : private Member
{
....
}

然后我有一个容器:

class Population
{
public:
std::vector<Member>& m_members;
Population(std::vector<Member>& members);
}

当我将 Population 的构造函数与 Members vector 一起使用时,它编译正常。但是,如果我尝试将 Population 的 m_members 与 Mine_sweepers 的 vector 链接起来,编译器会抛出错误。

std::vector<Member> members;
Population pop(members); // this compiles OK

std::vector<Mine_sweeper> sweepers;
Population pop(sweepers); // but here I get an error
main.cpp(23): error C2664: 'Population::Population(std::vector &)' : cannot convert parameter 1 from 'std::vector' to 'std::vector &'

最佳答案

Mine_sweeper 的 vector 不是成员的“种类” vector ,即使 Mine_sweeper 是成员的“种类”也是如此。你不能使用 vector<Derived>代替 vector<Base> .

使用 vector<unique_ptr<Member>>而不是 vector<Member>vector<Mine_sweeper> .这使您能够拥有不同种类的成员(即同时拥有 Mine_sweepers 和其他成员子类型)。

或者,将 Population 类转换为类模板:

class Population<T>
{
public:
std::vector<T>& m_members;
Population(std::vector<T>& members);
}

这样,一个 Population 实例可能只包含一种类型的 Members。

关于c++ - 在需要基本类型的 std::vector 的地方传递派生类型的 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40820183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com