gpt4 book ai didi

c++ - 如何将派生类的 shared_ptr vector 转换为基类的 shared_ptr vector

转载 作者:可可西里 更新时间:2023-11-01 16:34:38 27 4
gpt4 key购买 nike

class Interface
{
};

class Class : public Interface
{
};

class Foo
{
public:
std::vector<std::shared_ptr<Interface>>& GetInterfaces()
{
return *(std::vector<std::shared_ptr<Interface>>*)(&m_data);
//return m_data;
}

private:
std::vector<std::shared_ptr<Class>> m_data;
};

这行得通,但又丑又吓人。 有更好/更安全的方法吗?我不想做 m_data类型 std::vector<std::shared_ptr<Interface>>因为模块 Foo完全属于 Class 作品的,Interface (和 Foo::GetInterfaces() )被实现为与一个单独的模块交互,该模块应该只知道 Interface功能。

如果这里有任何不清楚的地方,请告诉我,这对我来说很有意义,但我已经为这个问题苦苦思索了一段时间。

最佳答案

转换不正确,它们是不同的类型;我很确定您正在调用未定义的行为。

您需要构造一个新的 vector 并按值返回它。

std::vector<std::shared_ptr<Interface>> b (m_data.begin(), m_data.end());
return b;

这应该仍然相当便宜(1 个分配)。

关于c++ - 如何将派生类的 shared_ptr vector 转换为基类的 shared_ptr vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14964909/

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