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

标签 c++ c++11 lambda shared-ptr stdvector

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

相关文章:

c++ - 为什么 string::find_first_of() 返回意外结果?

java - IntConsumer 的编译器问题返回 Function.identity().apply()

Java lambda 表达式 : Combinator-Pattern Improvement

c++ - 比较字符串c++的问题

c++ - 使用 vector 资源句柄的递归成员初始化

c++ - 使用 avicap.dll 打开设置

c++ - Visual C++ 为什么 std::move 崩溃

java - 通过 lambda 表达式应用过滤器后如何获取 Stream 的大小?

c++ - 用户空间中的内存障碍? (Linux,x86-64)

c++ - 多重转换规则 C++