std :: async在成员字段的成员功能上

std::async on member function of member field

本文关键字:成员 功能上 字段 async std      更新时间:2023-10-16
class Foo
{
private:
    std::unique_ptr<Bar>& bar;
    int retVal;
    std::future<int> myFuture = std::async(std::launch::async, &Foo::bar->myMethod, this);
    Foo(std::unique_ptr<Bar>& bar_) : bar(bar_) {}
}

我相信这总结了主题,因为这行不通。如何在Bar::myMethod上启动myFuture

您需要命名 Bar::myMethod,然后通过(cv适当) Bar *Bar &。看起来像

std::async(std::launch::async, &Bar::myMethod, bar.get());

好吧,请修复一些混乱(即添加所有丢失的所有内容),我们可以使用lambda函数到达简单的解决方案:

#include <future>
#include <iostream>
class Bar {
public:
    int myMethod(void) {
        std::cerr << "Hi!n";
        return 1;
    }
};
class Foo {
private:
    std::unique_ptr<Bar>& bar;
    int retVal;
    std::future<int> myFuture = std::async(std::launch::async, [this](void)->int{return bar->myMethod();});
public:
    Foo(std::unique_ptr<Bar>& bar_) : bar(bar_) {}
};
int main(void) {
    std::unique_ptr<Bar> bar = std::make_unique<Bar>();
    Foo foo(bar);
    return 0;
}

当然,这可能不是唯一的解决方案,也不是最好的解决方案。