У меня есть класс С++, который я встраиваю в модуль Python, используя boost::python. У меня есть несколько функций, которые я хочу принимать в качестве аргументов ключевого слова. Я настроил функции-оболочки для передачи в raw_arguments, и это работает нормально, но я хочу добавить некоторую проверку ошибок для аргументов функции. Есть ли стандартный способ сделать это?
Мой прототип функции на C++ выглядит примерно так:
double MyClass::myFunction(int a, int b, int c);
Третий аргумент является необязательным, его значение по умолчанию равно 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, что может облегчить это, или мне нужно написать код, чтобы проверить все это самому? Если мне нужно, как я могу вызвать исключения? Есть ли стандартный способ сделать это?