Chcę wiedzieć, czy jest jakikolwiek sposób, aby wystawić klasę C++ do Pythona, ale bez budowania pośredniej biblioteki współdzielonej.Jak odsłonić klasę C++ do Pythona bez budowania modułu
Oto mój pożądany scenariusz. Na przykład mam następujące C++ klasa:
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;
};
Chciałbym przekonwertować jakoś tę klasę (lub jego intance) do PyObject * w celu wysłania go jako paremter (args), aby na przykład PyObject_CallObject:
PyObject* PyObject_CallObject(PyObject* wrapperFunction, PyObject* args)
w drugiej strony w moim boku Pythona, będę mieć wrapperFunction która pobiera wskaźnik na moim C++ klasy (lub jej instancji) jako parametr i wywołuje jego metody lub wykorzystuje swoje właściwości:
def wrapper_function(cPlusPlusClass):
instance = cPlusPlusClass(4, 5)
result = instance.Addition()
Jak widać, tak naprawdę nie potrzebuję/chcę mieć oddzielnej biblioteki współdzielonej lub budować modułu przez pythona doładowania. Wszystko, czego potrzebuję, to znaleźć sposób na przekonwertowanie kodu C++ do PyObject i wysłanie go do Pythona. Nie mogę znaleźć sposobu, aby to zrobić przez biblioteki C python, boost lub SWIG.
Czy masz jakiś pomysł? Dzięki za pomoc.
nie jestem pewien, czy rozumiem dokładnie, co chcesz. Boost.Python ma 'boost :: python :: object :: ptr', które zwraca' PyObject * '- czy tego właśnie szukałeś? –
Wierzę, że możliwy jest dostęp do C/C++ za pomocą 'ctypes', ale może to być trudne zadanie, aby odsłonić klasę C++. – Bakuriu
@PaulManta: Dzięki za odpowiedź. To, czego chcę, składa się z 3 kroków: Krok 1: obuduj klasę C++ w obiekcie PyObject.Step2 wyślij ten wskaźnik do funkcji Pythona. Krok 3. przy użyciu tego wskaźnika C++ w Pythonie (tj. wywoływanie jego metod). Czy mógłbyś być bardziej pragmatyczny i powiedzieć, jak można zaimplementować kod C++ do obiektu :: ptr? –