gpt4 book ai didi

c++ - 将 vector 放入需要 vector 的函数中

转载 作者:IT老高 更新时间:2023-10-28 12:55:12 27 4
gpt4 key购买 nike

考虑这些类。

class Base
{
...
};

class Derived : public Base
{
...
};

这个函数

void BaseFoo( std::vector<Base*>vec )
{
...
}

最后是我的 vector

std::vector<Derived*>derived;

我想通过derived发挥作用BaseFoo ,但编译器不让我。我如何解决这个问题,而不将整个 vector 复制到 std::vector<Base*> ?

最佳答案

vector<Base*>vector<Derived*>是不相关的类型,所以你不能这样做。这在 C++ FAQ here 中有解释。 .

您需要将变量从 vector<Derived*> 更改为到 vector<Base*>并插入 Derived对象放入其中。

另外,为了避免复制 vector不必要地,您应该通过 const 引用而不是值来传递它:

void BaseFoo( const std::vector<Base*>& vec )
{
...
}

最后,为避免内存泄漏,并使您的代码异常安全,请考虑使用旨在处理堆分配对象的容器,例如:

#include <boost/ptr_container/ptr_vector.hpp>
boost::ptr_vector<Base> vec;

或者,将 vector 更改为保存智能指针而不是使用原始指针:

#include <memory>
std::vector< std::shared_ptr<Base*> > vec;

#include <boost/shared_ptr.hpp>
std::vector< boost::shared_ptr<Base*> > vec;

在每种情况下,您都需要修改您的 BaseFoo相应地发挥作用。

关于c++ - 将 vector<Derived*> 放入需要 vector<Base*> 的函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/114819/

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