在我的 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 包装了它,现在我可以直接使用 Python 文字调用我的 Foo 方法,因为它们被隐式转换为 Bar 对象。
f = Foo()
f.do_this(5)
f.do_that("hello")
现在,我还希望能够使用其他 Python 类型,例如元组,如下所示:
f.do_that((1,2,3))
但我不想触碰最初的 Bar 定义,也不想用 Boost::Python 的东西污染我的 C++ 库。我想在我的绑定代码中编写一个包装函数,但我不明白这是否可行,以及这样做的正确方法是什么。
换句话说:我可以注册一个工厂函数以用作 Python 中的自动转换吗?