8

boost::python を使用して Python モジュールに構築している C++ クラスがあります。キーワード引数を取りたい関数がいくつかあります。raw_arguments に渡すラッパー関数を設定しましたが、正常に動作しますが、関数の引数のエラー チェックを組み込みたいと考えています。これを行う標準的な方法はありますか?

C++ での私の関数プロトタイプは、次のようになります。

double MyClass::myFunction(int a, int b, int c);

3 番目の引数はオプションで、デフォルト値は 0 です (これまでマクロを使用して boost::python に実装しました)。Python では、次の動作を実現できるようにしたいと考えています。

MyClass.my_function(1) # Raises exception
MyClass.my_function(2, 3) # So that a = 2, b = 3 and c defaults to 0
MyClass.my_function(2, 3, 1) # As above, but now c = 1
MyClass.my_function(2, 3, 1, 3) # Raises exception
MyClass.my_function(3, 1, c = 2) # So a = 3, b = 1 and c = 2
MyClass.my_function(a = 2, b = 2, c = 3) # Speaks for itself
MyClass.my_function(b = 2, c = 1) # Raises exception

これを容易にするboost::pythonまたはraw_functionラッパーに何かありますか、それとも自分ですべてをチェックするコードを書く必要がありますか? 必要な場合、どうすれば例外を発生させることができますか? これを行う標準的な方法はありますか?

4

1 に答える 1