我想知道是否有任何方法將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? –