Ich habe eine Klasse mit dem Namen Reciever
, die eine Funktion namens recieve(const Event *)
hat, wobei Event
von BaseEvent
erbt. Ich möchte eine Bindung zu einer bestimmten Instanz dieser Klasse erstellen. Die Instanz heißt rec
. Um dies zu tun ich Gebrauch:Wie kann ich eine Funktion mit einem abgeleiteten Argument in eine Funktion mit einem Basisargument umwandeln?
void(Reciever::*func)(const Event *) = &Reciever::recieve;
auto recievePtr = std::bind(func, &rec, std::placeholders::_1);
Allerdings, wenn ich versuche, diese zu speichern, in einem Vektor, muß ich ein std::function
angeben, die ein BaseEvent
als Eingabe verwendet, und keine Event
, etwa so:
std::vector<std::function<void(const BaseEvent*)>>
Wie kann ich recievePtr
umwandeln, damit ich es richtig im Vektor speichern kann? Ist das überhaupt möglich? Das Problem mit einer Funktion Zeiger auf eine BaseEvent
ist, dass die Reciever
mehrere recieve()
Methoden mit verschiedenen abgeleiteten Klassen basieren alle haben auf BaseEvent
Hmm, das entfernt den Overhead der Bindung. Ich frage mich, ob es einen besseren Weg gibt. – user975989