class Interface{};
class Foo: public Interface{};
class Bar{
public:
vector<Interface*> getStuff();
private:
vector<Foo*> stuff;
};
如何实现功能getStuff()
?
答案 0 :(得分:25)
vector<Interface*> result(stuff.begin(), stuff.end());
return result;
答案 1 :(得分:5)
std::vector<Inherited*>
和std::vector<abstract*>
是不同的,几乎不相关的类型。你不能从一个投射到另一个。但你可以{@ 1}}或使用迭代器范围构造函数,如@Grozz所说。
在评论中回答你的问题:它们是不同的,因为两个兼容类型成员的类是不同的。例如:
std::copy
要使最后一个语句起作用,您需要定义一个显式赋值运算符,如:
struct Foo {
char* ptr0;
};
struct Bar {
char* ptr1;
};
Foo foo;
Bar bar = foo; // boom - compile error
希望这说清楚。
答案 2 :(得分:1)
我正在使用它。这不是很好,但我认为很快:)。
vector<Interface*> getStuff()
{
return *(std::vector<Interface*> *)&stuff;
}
您还可以使用此方法仅返回对向量的引用
vector<Interface*> &getStuff()
{
return *(std::vector<Interface*> *)&stuff;
}