C++20 std::async 与零参数的模板 lambda

问题描述 投票:0回答:1

是否可以使用具有 0 个参数的模板 lambda 来调用

std::async
?谢谢

*https://en.cppreference.com/w/cpp/language/lambda

#include <future>
#include <array>

int main() {
    auto func = []<int n>() {
      std::array<double, n> arr;    
    };

    func.operator()<5>(); // This compiles

    std::async(func.operator()<5>); // This doesn't compile

    return 0;
}
c++ lambda c++20 stdasync
1个回答
0
投票

根据您的意图用其中任何一个替换有故障的线路

std::async([&func] {  func.operator()<5>(); }); //lambda remains withing its original scope
std::async([f =func] {  f.operator()<5>(); }); //lambda is copied
std::async([f =std::move(func)] {  f.operator()<5>(); }); // lambda is moved into the async's function inner scope

函数对象不能通过点绑定到它的第一个参数,它不是 Python ;-)

© www.soinside.com 2019 - 2024. All rights reserved.