J'ai une commande std :: map que j'essaie de stocker des pointeurs vides pour les valeurs. Le problème est que la plupart des pointeurs que j'essaie de stocker sont des méthodes dans une classe et ont une quantité différente de paramètres. Je sais pour les paramètres que je peux utiliser une liste va donc ce n'est pas trop un problème, le problème serait le pointeur lui-même.Passer le vide (*) en C++
C'est ce que j'ai:
class A
{
public:
A();
void methodA(...);
};
class B
{
public:
B();
void methodB(...);
};
void method_no_class(...) { }
std::map<int, void(*)(...)> my_map;
my_map[0] = &method_no_class;
B* cb = new B();
my_map[1] = &cb->methodB; // will return error
jeter un oeil à boost :: bind et boost :: function –
@Brian: Faire une réponse pour un +1. –
La seule fois où void * doit être utilisé est dans les paramètres de fonction dont le type de données est inconnu au moment de la compilation. Sinon, utilisez toujours le type de données correct même si ce type peut changer au moment de l'exécution. Vous ne pouvez rien faire avec un pointeur void * sauf (1) le passer à une autre fonction, ou (2) le transtyper dans un autre type de données. Alors pourquoi vous causer beaucoup de chagrin sur la typographie et les problèmes associés? – SjB