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