gpt4 book ai didi

c++ - 将 vector> 传递给需要 vector> 的函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:47:27 26 4
gpt4 key购买 nike

我使用的代码结构有问题,如下(简化):

class SPoint
{
public:
SPoint(double x, double y, double z) : _x(x), _y(y), _z(z) {}

protected:
double _x, _y, _z;
}

class Point3D : public SPoint
{
public:
Point3D(double x, double y, double z) : SPoint(x, y, z) { // default values for U and V }

protected:
double U, V;
}

这些点用于创建折线:

class SPolyline
{
public:
SPolyline(const vector<shared_ptr<SPoint>>& points) { // points are cloned into _points}

protected:
vector<shared_ptr<SPoint>> _points;
};


class Polyline3D : SPolyline
{
public :
Polyline3D(const vector<shared_ptr<Point3D>>& points) : SPolyline(points) // doesn't compile
};

当我尝试用这个错误编译 Polyline3D 时,VS2010 拒绝了我

error C2664: 'SPolyline::SPolyline(const std::vector<_Ty> &)' : cannot convert parameter 1 from 'const std::vector<_Ty>' to 'const std::vector<_Ty> &'
with
[
_Ty=std::tr1::shared_ptr<SPoint>
]
and
[
_Ty=std::tr1::shared_ptr<Point3D>
]
and
[
_Ty=std::tr1::shared_ptr<SPoint>
]
Reason: cannot convert from 'const std::vector<_Ty>' to 'const std::vector<_Ty>'
with
[
_Ty=std::tr1::shared_ptr<Point3D>
]
and
[
_Ty=std::tr1::shared_ptr<SPoint>
]
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

vector<shared_ptr<Derived>> 没有默认转换至 vector<shared_ptr<Base>> .知道我需要折线中的点的共享所有权,如何解决这个问题? shared_ptr我使用的是标准的,不是来自 Boost 的。

最佳答案

从容器中抽象出来并使用迭代器。

template<typename InputIterator>
Polyline3D(InputIterator begin, IntputIterator end) : SPolyline(begin ,end) {}

可以为 vector 实现这样的转换,但考虑到它可能引入的细微错误(想想隐式转换),最好不要这样做。

关于c++ - 将 vector<shared_ptr<Derived>> 传递给需要 vector<shared_ptr<Base>> 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11582266/

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