我想知道是否有任何方法将C++类暴露给Python,但没有构建中间共享库。如何在不构建模块的情况下将C++类暴露给Python
这是我的理想场景。例如,我有下面的C++类:
class toto
{
public:
toto(int iValue1_, int iValue2_): iValue1(iValue1_), iValue2(iValue2_) {}
int Addition(void) const {if (!this) return 0; return iValue1 + iValue2;}
private:
int iValue1;
int iValue2;
};
我想以某种方式转换这个类(或其intance)到的PyObject *,以将其作为paremter(参数)到例如PyObject_CallObject:
PyObject* PyObject_CallObject(PyObject* wrapperFunction, PyObject* args)
在我的Python侧另一方面,我将有一个wrapperFunction这令我非常C++类(或其实例)作为参数的指针,并调用它的方法,或者使用其属性:
def wrapper_function(cPlusPlusClass):
instance = cPlusPlusClass(4, 5)
result = instance.Addition()
正如你所看到的,我并不需要/想要有一个单独的共享库或者通过boost python构建模块。我需要的是找到一种方法将C++代码转换为PyObject并将其发送给python。我无法找到通过C python库,boost或swig来实现的方法。
你有什么想法吗? 感谢您的帮助。
的 情况下,我不知道我知道你想要什么。 Boost.Python有'boost :: python :: object :: ptr',它返回一个'PyObject *' - 这是你在找什么? –
我相信可以通过'ctypes'访问C/C++,但是暴露一个C++类可能是一件困难的事情。 – Bakuriu
@PaulManta:谢谢你的回答。我想要的包括3个步骤:第1步:在PyObject指针中封装一个C++类。步骤2将此指针发送给一个python函数。第三步。在python中使用这个C++指针(即调用它的方法)。所以,你可以请更实用,并告诉通过一个例子如何封装C++代码到object :: ptr? –