gpt4 book ai didi

c++ - 指向 swig(或 Boost::Python)成员的指针

转载 作者:行者123 更新时间:2023-11-30 04:40:07 27 4
gpt4 key购买 nike

我从我的 C++ 应用程序中为 python 做了一些绑定(bind)。

问题是我使用了指向成员的指针(这是为了计算最短路径并将要最小化的属性作为参数)。

这是 C++ 签名:

std::vector<Path> martins(int start, int dest, MultimodalGraph & g, float Edge::*)

这就是我所做的(根据我在文档中的理解):

%constant float Edge::* distance = &Edge::distance;

这是我从 python 调用我的函数的方式:

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::*)

我有一个重载方法,它使用默认的第 4 个参数,并且效果很好。

那么swig可以使用指向成员的指针吗?如果是的话,诀窍是什么?如果不是,最优雅的工作方式是什么?

感谢您的帮助!

更新:如果有人知道 Boost::python 是否确实做到了,我会切换到它。

最佳答案

不知道 SWIG,但是在 boost::python 中你可以写一个包装器:

bool foo(int x, float* result);

boost::python::tuple foo_wrapper(int x)
{
float v;
bool result = foo(x, &v);
return boost::python::make_tuple(result, v);
}

BOOST_PYTHON_MODULE(foomodule)
{
def("foo", &foo_wrapper);
}

在 python 中你会:

result, v = foomodule.foo(x)

由于在 Python 中 float 是不可变的,您实际上不能将一个 float 传递给方法并期望该方法更改浮点值,因此我们调整代码以返回一个值元组。

关于c++ - 指向 swig(或 Boost::Python)成员的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1770725/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com