1
我從python的C++應用程序中做了一些綁定。Swig(或Boost :: Python)中的成員指針
問題是我使用指向成員的指針(它用於計算最短路徑並將屬性最小化爲參數)。
這是C++簽名:
std::vector<Path> martins(int start, int dest, MultimodalGraph & g, float Edge::*)
這是我做的(從我在doc理解):
%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::*)
我有一個重載的方法,使用默認的第四個參數,它完美的工作。
那麼有可能使用swig指向成員的指針嗎?如果是的話,有什麼竅門?如果不是,那麼最合適的工作方式是什麼?
謝謝你的幫助!
更新:如果有人知道Boost :: python是否確實如此,我會切換到它。
謝謝你的回答。但是如果我把它做對了,用這種方法你只需要傳遞一個變量的引用。 我想傳遞一個指向類成員的指針。不是給一個實例成員。 我有一個類C {int a; int b;};然後你可以調用foo(c,&C :: a)或foo(c,&C :: b),這取決於你想讓你的函數使用成員函數a或實例c上的類C的成員b。 – 2010-02-07 15:03:20
在這種情況下,我不知道如何包裝你的方法,因爲在包裝過程中你需要一個C實例。你真的需要指向類成員的指針嗎?難道你不能改變你的設計接受一個int而不是? – 2010-02-08 16:37:26
這就是我所做的。但我不滿意。最大的想法是有一個具有各種成本的圖形,我想要一個算法以運行成本作爲參數運行(對於每個邊,算法將根據參數選擇好的變量)。 我覺得我太野心勃勃了。很可能python的層次太低,並且不允許爲C++提供模板和成員指針的抽象。 我仍然接受答案。感謝您的努力:) – 2010-02-09 16:15:44