gpt4 book ai didi

c++ - 将带有 lambda 的 std::shared_ptr 插入 vector 中

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:57 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com