12

重複の可能性:

std::bind オーバーロード解決

次の C++ の例を検討してください

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);
}

これにより 'std::async' が得られます: 関数の引数があいまいなため、テンプレートの引数を推測できません。このあいまいさを解決するにはどうすればよいですか??

4

2 に答える 2

15

必要なオーバーロードを示すあいまいさをコンパイラが解決できるようにします。

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

または代わりにラムダ式を使用します。

std::async(std::launch::async, [&a] { return a.foo(2, 3.5); });
于 2014-11-20T07:14:15.913 に答える