gpt4 book ai didi

C++ 无法将 lambda 转换为 std::pair 中的 std::packaged_task

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:04 26 4
gpt4 key购买 nike

我用 std::packaged_task 做了一些测试遇到了这个问题。

std::packaged_task<int(void)> task([]() -> int { return 1; });
task();

编译和调用 task()调用 lambda。但是,这不会编译:

std::pair<int, std::packaged_task<int(void)>> pair(15, []() -> int { return 15; });
pair.second();

因为

error C2664: 'std::pair<int,std::packaged_task<int (void)>>::pair(const std::pair<int,std::packaged_task<int (void)>> &)': cannot convert argument 2 from 'main::<lambda_abbe6cccb9110894d95e872872ec1296>' to 'const std::packaged_task<int (void)> &'

然而,这确实编译:

std::vector<std::packaged_task<int()>> v;
v.emplace_back([](){ return 1; })

为什么我不能创建 pair

最佳答案

所讨论的构造函数是显式构造函数。您需要显式调用它才能编译:

std::pair<int, std::packaged_task<int(void)>> 
pair(15, std::packaged_task<int(void)>{ []() -> int { return 15; } });

或者,更好的是,使用 std::make_pair:

auto pair = 
std::make_pair(15, std::packaged_task<int(void)>{ []() -> int { return 15; } });

vector 的情况是可行的,因为 emplace_back 将参数转发给 value_type 的构造函数。如果您尝试使用 push_back,它是行不通的。

关于C++ 无法将 lambda 转换为 std::pair 中的 std::packaged_task,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29955554/

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