加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何将派生类的shared_ptrs向量转换为基类的share_ptrs向量

发布时间:2020-12-16 04:56:10 所属栏目:百科 来源:网络整理
导读:class Interface{};class Class : public Interface{};class Foo{public: std::vectorstd::shared_ptrInterface GetInterfaces() { return *(std::vectorstd::shared_ptrInterface*)(m_data); //return m_data; }private: std::vectorstd::shared_ptrClass m
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;
};

这有效,但很丑陋和可怕.有没有更好/更安全的方法呢?我不想制作类型为std :: vector< std :: shared_ptr< interface>>的m_data.因为模块Foo完全与Class一起工作,所以实现了Interface(和Foo :: GetInterfaces())以与一个应该只知道接口功能的单独模块进行交互.

让我知道如果这里的任何事情都不清楚,这对我来说是有意义的,但我一直在坚持不懈地对付这个问题.

解决方法

铸造不正确,它们是不同的类型;我很确定你正在调用未定义的行为.

您需要构造一个新的向量并按值返回它.

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

这仍然应该相当便宜(1次分配).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读