Mat*_*Mat 8 c++ polymorphism casting vector
class Interface{};
class Foo: public Interface{};
class Bar{
public:
vector<Interface*> getStuff();
private:
vector<Foo*> stuff;
};
Run Code Online (Sandbox Code Playgroud)
我该如何实现这个功能getStuff()?
Gro*_*ozz 25
vector<Interface*> result(stuff.begin(), stuff.end());
return result;
Run Code Online (Sandbox Code Playgroud)
std::vector<Inherited*>并且std::vector<abstract*>是不同的,几乎无关的类型.你不能从一个投射到另一个.但您可以std::copy使用或使用迭代器范围构造函数,如@Grozz所说.
在评论中回答你的问题:它们是不同的,因为两个兼容类型成员的类是不同的.例:
struct Foo {
char* ptr0;
};
struct Bar {
char* ptr1;
};
Foo foo;
Bar bar = foo; // boom - compile error
Run Code Online (Sandbox Code Playgroud)
要使最后一个语句起作用,您需要定义一个显式赋值运算符,如:
Bar& Bar::operator=( const Foo& foo ) {
ptr1 = foo.ptr0;
return *this;
}
Run Code Online (Sandbox Code Playgroud)
希望这说清楚.
| 归档时间: |
|
| 查看次数: |
4638 次 |
| 最近记录: |