私は多種多様なC++関数を持っています。これはほぼ20種類の異なる型で呼び出すことができます。boost.pythonを使ってC++の多型関数をエクスポートするスマートな方法
私はこのような何かやっているのpythonためにそれを公開するために:
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>);
}
:
#include originalFunctionNamespace.hpp
template<class T>
T foo(T x)
{
return orignalFunctionNamespace::foo(x);
}
をが、その後のpythonからそれらを呼び出すために、私は、彼らがサポートする各タイプに機能を特化する必要が
これは機能しますが、私はそれを行うよりスマートな方法がなければならないと考えることをやめることはできません。私は多くの多くの機能のためにそれをやらなければならないので、物事は大きくて超反復しています。 提案がありますか?
これはポリモフィズムではないようですが、関数のオーバーロードだけです。 – interjay
本当に良い方法はありませんが、プリプロセッサを使って各行を短くし、 "using namespace originalFunctionNamespace;"それらをさらに短縮する。それは繰り返しを解決するのではなく、少なくともあなたに多くのテキストを保存します。 – Nobody
@interjay関数は入力として多くの型を受け取ることができ、それに応じてさまざまな型を出力します。 "異なるタイプの値に評価されるか、または異なるタイプの値に適用される関数は、多形関数として知られています。"右? –