J'ai quelque chose comme un algorithme de tri ici, et je veux lui passer un foncteur, qui fournit les critères de tri (std :: fonction binaire). Il devrait donc appeler T.operator <() par exemple si std :: less est donné.Comment passer un std-foncteur en C++ et l'utiliser sans savoir lequel il est spécifiquement
Le problème est que l'opérateur de fonction membre() n'est pas virtuel. J'ai donc besoin de savoir quel type d'objet a été donné, d'effectuer un casting dynamique qui n'est pas vraiment sympa.
Regards,
Dennis
Je ne veux pas utiliser dynamic_cast ... mais je ne peux pas non plus utiliser operator() car dans le contexte local, c'est binary_function qui n'a pas d'opérateur() défini. vous devez le surcharger d'abord pour l'utiliser ... – Dennis
@Dennis: alors vous utilisez abusivement 'binary_function'. Comme je l'ai dit dans ma réponse, il n'a jamais été conçu pour agir comme une classe de base polymorphe. Il définit simplement quelques typedefs utiles, rien de plus. Vous ne pouvez pas passer de façon significative une 'fonction_binaire 'dans une autre fonction, cela n'est pas supposé fonctionner. –
ok merci de me donner un exemple? (link?) J'avais l'intention d'utiliser binary_function comme une superclasse non spécifiée afin que chaque foncteur de comparaison de la STL puisse être utilisé ... je ne comprends pas vraiment comment utiliser un template ici. – Dennis