我有一个 vector 定义为:
std::vector<std::shared_ptr<Orders> > vOrders;
添加到 vOrders
时我想添加如下内容:
vOrders.push_back(<std::shared_ptr<Orders> >([]() {
TimerForProcessingOrders _timerForProcessingOrders;
_timerForProcessingOrders.detach();
}));
但是编译器给了我一个错误:
Expected expression: Expected '(' for function-style cast or type construction
<
看起来很奇怪和>
左右std::shared_ptr
但删除它会出现错误:
No matching conversion for functional-style cast from '<lambda >' to 'std::shared_ptr<Orders>'
我犯了什么错误?
最佳答案
这段代码的作用(以一种错误的方式)是获取由 lambda 构造的对象,并将 lambda 本身存储到 vector 中——而不是 shared_ptr<Order>
类型的对象。这就是 vector 所需要的。
but the compiler is giving me an error:
这是因为额外的< >
是完全无效的语法,因此编译器最多可以给您的是“无效表达式”。
It looks weird the < and > around std::shared_ptrbut removing it gives an error:
No matching conversion for functional-style cast from '<lambda >' to 'std::shared_ptr<Orders>'
基本上你这里有的是 shared_ptr<Orders>(/* .. Lambda .. */)
-- 编译器说它不知道如何将 lambda 转换为 Orders*
进入shared_ptr
.
您实际上想在这里完成什么?
如果您只想将指针传输到shared_ptr
你可以做类似的事情
TimerForProcessingOrders _timerForProcessingOrders;
std::shared_ptr<Orders> ptr(_timerForProcessingOrders.detach());
vOrders.emplace_back(std::move(ptr));
不需要 lambda。
关于c++ - 将带有 lambda 的 std::shared_ptr 插入 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20864597/