Je veux savoir si ce qui suit est possible en C++. J'ai besoin de construire une classe qui va stocker comme un membre de données un std::map
, avec les clés étant de type std::string
, et les valeurs étant des pointeurs de fonction. La chose est que je veux que ces pointeurs de fonction à variadique dans le sens où ils doivent pointer vers des fonctions acceptant un nombre arbitraire d'arguments, à savoir pointant vers des fonctions de la formeComment construire une classe avec des fonctions de pointeur variadique en tant que membres?
template<class... Args> f(Args...);
Le bit important est que je Je veux pouvoir avoir différents arguments pour les différents pointeurs de fonction dans la carte d'une instance donnée de ma classe. Par exemple, je pourrais vouloir créer un objet de ma classe et avoir sa carte contenant deux paires, une correspondant à une fonction ayant (double, int)
comme arguments, et une autre ayant (std::vector, int, int)
comme arguments. Et je veux être en mesure de rendre cela général, dans le sens où je veux pouvoir ajouter de nouveaux éléments à la carte, avec des listes d'arguments différentes (bien que je ne ferais cela qu'à la compilation, j'ai encore besoin de coder la classe sans connaître les types puisque je veux ajouter les nouveaux éléments d'autres fichiers/clients).
Quelle est la meilleure façon de mettre en œuvre cela?
Comment appelleriez-vous les fonctions de cette carte? La plupart des solutions suppriment tout type de sécurité de type compilation. Pouvez-vous utiliser 'std :: any' pour stocker vos pointeurs de fonction? –
Cela ressemble à un travail pour l'effacement de type. –
Une fois que vous tournez 'f' dans un pointeur de fonction, c'est une fonction concrète avec un nombre fixe de paramètres et de types. Vous ne pouvez pas stocker un modèle. – nwp