В моем C ++-коде у меня есть класс Foo со многими методами, принимающими переменную типа Bar в качестве аргумента:
class Foo {
public:
void do_this(Bar b);
void do_that(Bar b);
/* ... */
};
Bar имеет несколько конструкторов, которые создают новый объект из многих распространенных типов, таких как int, std :: string, float и т.д .:
class Bar {
public:
Bar(int i);
Bar(float f);
Bar(std::string s);
/* ... */
};
Я обернул это с помощью Boost :: Python и теперь я могу вызывать мои методы Foo напрямую, используя литералы Python, поскольку они неявно преобразуются в объекты Bar.
f = Foo()
f.do_this(5)
f.do_that("hello")
Теперь я хотел бы иметь возможность использовать и другие типы Python, такие как кортежи, например:
f.do_that((1,2,3))
Но я не хочу касаться исходного определения Bar, и я не хочу загрязнять мою библиотеку C ++ с помощью Boost :: Python. Я хочу написать функцию-обертку в своем коде привязки, но я просто не могу понять, возможно ли это и как это правильно сделать.
Другими словами: можно ли зарегистрировать фабричную функцию для автоматического преобразования в Python?