c++ - 向量将派生的智能指针推回基本抽象类的智能指针向量中
问题描述
假设我有以下基本抽象类
class Worker {
public:
struct Details {
std::string name;
};
public:
virtual void work() = 0;
};
class Manager {
public:
virtual ~Manager() = default;
virtual void hire(Worker::Details details) = 0;
virtual void fire(const Worker & worker) = 0;
};
然后我实现了这两个抽象类:
class DerivedWorker : Worker {
public:
DerivedWorker(Worker::Details details) : details(details) {}
void work() override {}
private:
Worker::Details details;
};
class Derived : Manager {
public:
Derived() {}
void hire(Worker::Details details) override {
workers.push_back(std::make_unique<DerivedWorker>(details));
}
void fire(const Worker & worker) override {}
private:
std::vector<std::unique_ptr<Worker>> workers;
};
为什么会workers.push_back(std::make_unique<DerivedWorker>(details)
抛出编译器error: no matching member function for call to 'push_back'
异常?
同样,你会如何做同样的事情workers.emplace_back(...)
?
解决方案
push_back
不起作用,因为您忘记公开继承。
emplace_back 可能是同样的问题,尽管您永远不应该将 emplace_back 用于智能指针向量。
推荐阅读
- c++ - 我怎样才能让这个 std::conditional 不评估基于类型的表达式?
- javascript - 在多个 select2 输入中显示选择到搜索建议中的值
- java - 代码片段中的 Loc1 可以应用哪些注解
- kernel - 我可以像这样在opencl中分离编译二进制文件吗?
- javascript - 获取 html 元素,将它们放入数组中,并找到匹配项
- php - 为什么 php-fpm 需要 pm.max_requests 配置?
- sorting - 根据另一列对一列中的数据进行排序
- android - React Native 在连接到外围设备时订阅蓝牙事件
- windows - Lua write 输出奇怪的字节到文件
- apollo-client - Apollo-Client 字段策略:对带参数的字段使用 readField 句柄