J'ai une fonction C++ très polymorphe qui peut être appelée avec près de 20 types différents.Une manière intelligente d'exporter des fonctions polymorphes C++ avec boost.python
Pour l'exposer à python que je fais quelque chose comme ceci:
#include originalFunctionNamespace.hpp
template<class T>
T foo(T x)
{
return orignalFunctionNamespace::foo(x);
}
mais de les appeler de python je dois spécialiser les fonctions avec chaque type qu'ils soutiennent:
BOOST_PYTHON_MODULE(module_foo)
{
def("foo", foo<orignalFunctionNamespace::type1>);
def("foo", foo<orignalFunctionNamespace::type2>);
def("foo", foo<orignalFunctionNamespace::type3>);
def("foo", foo<orignalFunctionNamespace::type4>);
def("foo", foo<orignalFunctionNamespace::type5>);
def("foo", foo<orignalFunctionNamespace::type6>);
def("foo", foo<orignalFunctionNamespace::type7>);
...
...
...
def("foo", foo<orignalFunctionNamespace::typeN>);
}
Cela fonctionne, mais je ne peux m'empêcher de penser qu'il doit y avoir une façon plus intelligente de le faire. Comme je dois le faire pour de nombreuses fonctions, les choses deviennent de plus en plus grandes et répétitives. Des suggestions?
Cela ne semble pas être un polymorphisme, mais simplement une surcharge de fonction. – interjay
Pas vraiment un meilleur moyen mais vous pourriez essayer d'utiliser le préprocesseur pour raccourcir chaque ligne et "using namespace originalFunctionNamespace;" pour les raccourcir davantage. Que deos ne résout pas la répétition mais au moins vous sauve beaucoup de texte. – Nobody
@interjay la fonction peut recevoir plusieurs types en entrée et sortira de nombreux types différents en conséquence. "Une fonction qui peut évaluer ou être appliquée à des valeurs de différents types est connue comme une fonction polymorphe." droite? –