2014-11-20 13 views

Odpowiedz

9

Pomoc kompilator rozwiązać dwuznaczność wymowny który przeciążenia chcesz:

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

lub użyć wyrażenia lambda Zamiast:

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

funkcji w przypadku korzystania z expressionauto lambda 'F = STD :: asynchronicznego (Std: : launch :: async, [& a] {a.foo (2, 3.5);}); int x = f.get(); 'nie działa. Czy istnieje jakiś specjalny sposób uzyskania wartości? –

+2

@AmithChinthaka 'return a.foo (2, 3.5);' –

2

z pomocą std::bind overload resolution mogę wymyślić rozwiązanie dla mojego pytania. Są dwa sposoby robienia tego (według mnie).

  1. Stosując 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. bezpośrednio za pomocą wyżej wiązania

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