Tôi muốn biết nếu có cách nào để trưng ra một lớp C++ cho Python nhưng không xây dựng một thư viện chia sẻ trung gian.Làm thế nào để trưng ra một lớp C++ cho Python mà không xây dựng một mô-đun
Đây là kịch bản mong muốn của tôi. Ví dụ tôi đã sau lớp 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;
};
Tôi muốn chuyển đổi bằng cách nào đó lớp này (hoặc intance của nó) vào một PyObject * để gửi nó như paremter (args) để ví dụ PyObject_CallObject:
PyObject* PyObject_CallObject(PyObject* wrapperFunction, PyObject* args)
Mặt khác ở bên python của tôi, tôi sẽ có một wrapperFunction mà được con trỏ trên C của tôi ++ lớp (hoặc cá thể của nó) như tham số và nó gọi phương thức của nó hoặc sử dụng tính chất của nó:
def wrapper_function(cPlusPlusClass):
instance = cPlusPlusClass(4, 5)
result = instance.Addition()
Như bạn thấy, tôi không thực sự cần/muốn có một thư viện chia sẻ riêng biệt hoặc xây dựng một mô-đun bằng cách tăng python. Tất cả những gì tôi cần là tìm cách chuyển đổi mã C++ thành PyObject và gửi nó sang python. Tôi không thể tìm thấy một cách để làm điều đó bằng thư viện python C, tăng hoặc SWIG.
Bạn có ý tưởng gì không? Cảm ơn sự giúp đỡ của bạn.
Tôi không chắc là tôi hiểu chính xác những gì bạn muốn. Boost.Python có 'boost :: python :: object :: ptr', trả về' PyObject * '- đây có phải là thứ bạn đang tìm không? –
Tôi tin rằng có thể truy cập C/C++ qua 'ctypes', nhưng nó có thể là một nhiệm vụ khó khăn khi trưng ra một lớp C++. – Bakuriu
@PaulManta: Cảm ơn câu trả lời. Những gì tôi muốn bao gồm trong 3 bước: Bước 1: đóng gói một lớp C++ trong PyObject pointer.Step2 gửi con trỏ này đến một hàm python. Bước 3. sử dụng con trỏ C++ này trong python (tức là gọi các phương thức của nó). Vì vậy, bạn có thể xin được thực tế hơn và nói được bằng một ví dụ làm thế nào tôi có thể đóng gói mã C + + để đối tượng :: ptr? –