Ich habe versucht, eine Karte zu Klassenmethoden mit C++ 11 function
zu machen.Zuordnung zur Methode C++ 11
Die C-Style Funktionszeiger:
Methode:
void MyClass::MyMethod(void*);
Karte declare:
std::map<int, void (MyClass::*)(void*)> mapIdToMethod;
Karte einfügen:
mapIdToMethod.insert(std::make_pair(2, &MyClass::MyMethod));
Methodenaufruf:
Der obige Code ist funktioniert, aber wie kann ich es umwandeln, um C++ 11 function
zu verwenden?
Was ich versucht habe:
Karte declare:
std::map<int, function<void(void*)>> mapIdToMethod;//The map declare
Nun, wie kann ich einfügen und das Verfahren an diesem map
nennen?
wenn es keine Probleme mit dem Code, wie Sie es haben, es dabei belassen. ** Wenn es nicht kaputt ist, repariere es nicht ** – bolov
std :: function ist eine andere Sache. Ihr ursprünglicher Code speichert nur die Mitgliedsfunktionszeiger. std :: function würde erfordern, dass der Elementfunktionszeiger an eine Instanz der Klasse gebunden war. –
Wenn die Funktion MyMethod einen internen Status verwendet, müssen Sie wahrscheinlich [bind] (http://en.cppreference.com/w/cpp/utility/functional/bind) oder Lambda verwenden. Aber wie @bolov sagte, sollten Sie es nicht ändern, wenn es funktioniert. Zumindest, weil std :: function den Runtime-Overhead darauf legt, also lass es einfach. – Incomputable