Pointeurs de fonction de magasin avec différents paramètres dans un vecteur de pointeurs de vide.Convertir void * en fonction std :: <void()>
unordered_map<string, vector<void*> > List;
template <typename T>
void Listen(string Name, function<void(T)> Function)
{
List[Name].push_back(&Function);
}
Ensuite, je veux les appeler, en supposant que T
est le même type que celui utilisé pour Fire
pour le Listen
.
template <typename T>
void Fire(string Name, T Data)
{
auto Functions = List[Name];
for (auto i = Functions.begin(); i != Functions.end(); ++i)
{
(function<void(T)>)i)(Data);
}
}
Mais j'obtiens une erreur de compilation qui lit error C2064: term does not evaluate to a function taking 1 arguments in file ...\vc\include\xrefwrap 431 1
.
Qu'est-ce que je fais mal?
Vous appuyez sur l'adresse d'un paramètre. – chill
Pourquoi ne pas enregistrer 'std :: function' dans la' List'? – Lol4t0
@ Lol4t0. Malheureusement, je ne peux pas enregistrer différents types dans la même liste. Par exemple 'function', 'fonction ' et 'function ' sont tous différents types. –
danijar