2016-07-25 2 views
-3

Ich habe eine Klasse-Memberfunktion, die ich in einem std :: Thread ausführen möchten und es erwartet eine Funktion als Parameter, wie folgt:Wie initiiere ich einen std :: thread, der eine Funktion aufruft, die eine Funktion als Parameter erwartet?

ModbusAgent::poolingThread(int position, std::function<int(int, uint16_t*)> readFunction) 

Die Frage ist also: Wie kann ich eine std instanziiert: : Thread zum Aufruf das?

+1

Glauben Sie nicht, diese Frage, die Sie gestellt und beantwortet selbst ist am besten geeignet für [SO Dokumentation] (http://stackoverflow.com /Dokumentation)? – WhiZTiM

+0

Was ist das Besondere an einem Funktionsparameter? Es ist nur ein weiterer Parameter. – Barry

+0

Mit einem Lambda wäre viel einfacher – nishantjr

Antwort

-2

So, hier ist die Art, wie ich dafür, dass gefunden:

class A { 
public: 
    int bar(int, uint16_t*) { return 0; } 

    void foo(int position, std::function<int(int, uint16_t*)> readFunction) { 
      readFunction(position, nullptr); 
    } 

    void b() { 
     std::function<int(int, uint16_t*)> readFunction = std::bind(&A::bar, *this, std::placeholders::_1, std::placeholders::_2); 
     std::thread(&A::foo, this, 5, readFunction); 
    } 
}; 


int main() { 
    A a; 
    a.b(); 
}