2016-11-30 16 views
0

В процессе реализации моей интеграции с python у меня возникла проблема. У меня есть класс, который выглядит следующим образом:Доступ к c указателю в классе python из метода python, cython

cdef class SomeClass: 
    cdef CPPClass* cpp_impl 

    def some_method(self): 
     self.cpp_impl.cppMethod() 

И у меня есть класс CPP, который может вернуть CPPClass* значение. Smth так:

class Creator 
{ 
public: 
    CPPClass* createClass(); 

} 

Так что я хотел бы создать экземпляр SomeClass, как это:

cdef class PyCreator: 
    cdef Creator* cpp_impl 

    def getSomeClass(self): 
     o = SomeClass() 
     o.cpp_impl = self.cpp_impl.createClass() 
     return o 

Но я получаю сообщение об ошибке, что Cython не может преобразовать CPPClass* в объект Python. Как я могу решить свою проблему? Спасибо.

ответ

1

В getSomeClass он должен знать, какой тип o так, что назначение cpp_impl имеет смысл:

def getSomeClass(self): 
    cdef SomeClass o = SomeClass() # define the type 
    o.cpp_impl = self.cpp_impl.createClass() # I think you missed a "self" here 
    return o 
+0

Спасибо за ответ. Вы редактировали мой ответ, потому что я забыл использовать слово 'self', но это не моя проблема. Моя проблема в том, что я не могу получить доступ к указателю из метода python. – Megaxela

+0

... это то, что должен сделать 'cdef SomeClass o = ...'. Затем он знает, что 'o.cpp_impl' является указателем' CPPClass', и поэтому должен работать – DavidW

 Смежные вопросы

  • Нет связанных вопросов^_^