저는 SWIG를 사용하여 Python 테스트 프레임 워크 내에서 C++ 코드를 랩핑했습니다. 내 문제는 내가 다음 메서드를 호출하는 데 필요한 클래스의 인스턴스에 대한 포인터를 얻고있다. 예, 내 꿀꺽 꿀꺽 파일 본보기 내 : I 클래스가 있다면swig 래퍼를 사용하여 C++ 클래스 포인터에서 메소드를 호출하려면 어떻게해야합니까?
iExample* getMyClassInstance();
...
class iExample
{
public:
virtual void somePureVirtualMethod() = 0;
// ...
};
지금, 파이썬에서, 난 그냥 그러나 방법을
myClassInstance.somePureVirtualMethod()
를 부를 수, 나는 실제로이없는 클래스의 인스턴스. SWIG에서 생성 된 불투명 포인터가 있습니다. 어떻게 사용합니까? 물론 파이썬에서 나는 포인터 기능을 생성하기 위해 한모금에 cpointer.i 또는 pointer.i를 사용하여 시도
myClassInstancePtr = example.getMyClassInstance()
myClassInstancePtr->somePureVirtualMethod()
할 수는 없지만,이 클래스의 사본을 만들려고 있기 때문에 즉, 좋은 없습니다. 순수 가상 메서드가있는 인터페이스로도 컴파일 할 수 없으며 순수 가상 메서드를 사용하지 않아도 클래스 복사본을 만들고 싶지는 않습니다.
+1 멋지게 설명했습니다. 그러나 SWIG의 초보자는 % inline을 사용하여 독립 실행 형 .i를 만드는 방법을 이해하지 못할 수도 있습니다 (주석 행에서 도움이 될 수 있음). – Schollii
맞아, 난 그걸 몰랐어. ' swigged C에서 파이썬 코드로 포인터에 대한 메소드를 호출 할 수 있습니다. 그것을 테스트하고 작동합니다. 명시 적 추론이 필요한 경우 내 대답을 그것을 할 것이다,하지만 포인터에 대한 메서드를 호출하려면 포인터가 참조 인 척하고 '.'사용하십시오. – m24p