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次分配).