std::async with overloaded functions

强颜欢笑 提交于 2020-07-17 10:24:39

问题


Possible Duplicate:

std::bind overload resolution

Consider following C++ example

class A
{
public:
    int foo(int a, int b);
    int foo(int a, double b);
};

int main()
{
    A a;
    auto f = std::async(std::launch::async, &A::foo, &a, 2, 3.5);
}

This gives 'std::async' : cannot deduce template argument as function argument is ambiguous. How do I resolve this ambiguity??


回答1:


Help the compiler resolve ambiguity telling which overload you want:

std::async(std::launch::async, static_cast<int(A::*)(int,double)>(&A::foo), &a, 2, 3.5);
//                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

or use lambda expression instead:

std::async(std::launch::async, [&a] { return a.foo(2, 3.5); });



回答2:


With the help of std::bind overload resolution I figure out a solution for my question. There are two way of doing this (according to me).

  1. Using std::bind

    std::function<int(int,double)> func = std::bind((int(A::*)(int,double))&A::foo,&a,std::placeholders::_1,std::placeholders::_2);
    auto f = std::async(std::launch::async, func, 2, 3.5);
    
  2. Directly using above function binding

    auto f = std::async(std::launch::async, (int(A::*)(int, double))&A::foo, &a, 2, 3.5)
    


来源:https://stackoverflow.com/questions/27033386/stdasync-with-overloaded-functions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!