如何将每个元素排入唯一指针向量中? (C++)

How to enqueue each element in a vector of unique pointers? (C++)

我正在尝试将唯一指针向量的每个元素推送到队列中,但由于某种原因我的代码无法编译。

我得到的错误是:error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = Foo; _Dp = std::default_delete<Foo>]’

由于我将唯一指针的向量移动到 enqueue 函数中,并再次将每个元素移动到 queue_ 中,我不确定为什么这不起作用。

#include <memory>
#include <vector>
#include <queue>

class Foo {};

class Bar {
  
 public:
  template<typename Container>
  void enqueue(Container c) {
    for (const auto &e : c) {
      queue_.push(std::move(e));
    }
  };
  
 private:
  std::queue<std::unique_ptr<Foo>> queue_;
};

int main() {

  Bar bar;

  std::vector<std::unique_ptr<Foo>> c;
  c.push_back(std::make_unique<Foo>());

  bar.enqueue(std::move(c)); // this line is causing problem

};

您有一个额外的 const 可以避免移动并进行(删除)复制:

删除它并使用:

for (auto &e : c) {
    queue_.push(std::move(e));
}

Demo