파이썬 용 C++ 애플리케이션에서 바인딩을 만들었습니다.swig (또는 Boost :: Python)의 멤버에 대한 포인터
문제점은 멤버에 대한 포인터를 사용한다는 것입니다 (최단 경로 계산 및 매개 변수로 최소화하기위한 속성 제공).
이것은 C++ 서명됩니다 :
std::vector<Path> martins(int start, int dest, MultimodalGraph & g, float Edge::*)
이 (필자는 문서에서 이해 무엇에서) 내가 한 것입니다 :
%constant float Edge::* distance = &Edge::distance;
이것은 내가 파이썬에서 내 함수를 호출하는 방법입니다
foo.martins(0, 1000, g, foo.distance)
그리고 이것은 오류가 나는 얻을 :
NotImplementedError: Wrong number of arguments for overloaded function 'martins'.
Possible C/C++ prototypes are:
martins(int,int,MultimodalGraph &,float Edge::*)
기본 4th 파라 매터를 사용하는 오버로드 된 메서드가 있으며 완벽하게 작동합니다.
그래서 swig를 사용하는 멤버에 대한 포인터를 사용할 수 있습니까? 그렇다면 트릭이란 무엇입니까? 없다면, arround를 작동시키는 가장 우아한 방법은 무엇입니까?
도움 주셔서 감사합니다.
업데이트 : 누군가가 Boost :: python을 확실히 알고 있다면, 나는 그것을 바꿀 것입니다.
답변 해 주셔서 감사합니다. 하지만이 방법을 사용하면 변수에 대한 참조 만 전달하면됩니다. 클래스 멤버에 대한 포인터를 전달하려고합니다. 인스턴스 멤버가 아닙니다. 나는 C 클래스 {int a; int b;}; 그리고 함수 foo (C c, & int C :: *) 다음 함수는 멤버를 사용하는 경우에 따라 foo (c, & C :: a) 또는 foo (c, & C :: b)를 호출 할 수 있습니다. a 또는 인스턴스 c의 클래스 C의 b 멤버. –
이 경우 래핑하는 동안 C 인스턴스가 필요하므로 메서드를 래핑 할 수있는 방법을 알지 못합니다. 반원에게 포인터가 정말로 필요합니까? 대신 int &를 수신하도록 디자인을 변경할 수 있습니까? –
그게 내가 한거야. 그러나 나는 만족하지 않는다. 큰 아이디어는 다양한 비용으로 그래프를 만드는 것입니다. 매개 변수로 전달 된 비용으로 알고리즘을 실행하고 싶습니다. 모든 에지에 대해 알고리즘은 매개 변수에 따라 좋은 변수를 선택합니다. 나는 너무 야심적이었다고 생각한다. 대부분의 python은 너무 낮은 레벨이며 템플릿 및 멤버 포인터가있는 C++를 제공하는 추상화를 허용하지 않습니다. 나는 여전히 대답을 수락합니다. 노력 주셔서 감사합니다 :) –