假设我有一个抽象基类vehicle
,以及两个派生类car
和truck
。我有第三个班级dealership
,其中包含car
和truck
个实例的列表。 dealership
包含私人数据成员list<unique_ptr<vehicle>> vehicleList
。
假设我将dealership
的实例创建为dealership d1("bobsCars");
,将car
的实例创建为unique_ptr<vehicle> c1(new car("Toyota", 1988, 1500));
如何重载+ =运算符,以便d1 += std::move(c1);
将c1
移至d1
?
我尝试将+ =重载为dealership
的成员函数,如下所示,
void operator+=(std::unique_ptr<vehicle> v){
vehicleList.push_back(std::move(*v));
}
和
template <typename T>
void operator+=(std::unique_ptr<T> v){
vehicleList.push_back(std::move(*v));
}
但我收到错误error C2664: 'cannot convert argument 1 from..
我可以通过将列表更改为list<vehicle*> vehicleList
来使用原始指针。将车辆实例创建为vehicle* c1 = new car("Toyota", 1988, 1500);
void Task::operator+=(vehicle* s){
vehicleList.push_back(s);
}
将dealership
个实例设为dealership d1("bobsCars");
,然后将新车添加到vehicleList
,
d1 += std::move(c1);
我错过了什么?如何将原始指针版本转换为unique_ptr
?