假设我们有一个名为Vehicle的抽象类.一堆类将从车辆继承,如船,汽车,卡车等.
我想创建一个函数,它给我一个指向车辆的指针,给出我传入的某些参数.我不需要访问底层的Vehicle.到目前为止我有这样的事情:
boost::shared_ptr<Vehicle> create_vehicle(Environment e, Cost c) {
if (e.is_water()) {
boost::shared_ptr<Boat> boat(new Boat());
boat->set_location("USA");
boat->set_environment(e);
...
return boat; // How should I return the shared pointer here?
// I get an error for doing this
// "Vehicle is an inaccessible base of boat"
} else if (e.is_land()) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
当函数的返回值是shared_ptr时,如何返回派生的shared_ptr?铸造是必要的还是没有铸造的方法?我想我也可以按值返回派生类,但我不想在返回时再制作车辆的副本.