boost python传递引用?

poiuytrewq_2010 2009-11-16 03:45:41
void xxx(int& x)
{
x = 100;
}
def("xxx", xxx);

import y
a = 0
y.xxx(a)
报错了:
ArgumentError: Python argument types in
L0_L1.xxx(int)
did not match C++ signature:
xxx(int {lvalue})


请问像这种传递引用的函数如何用boost封装?
...全文
178 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nbalexis 2010-02-06
  • 打赏
  • 举报
回复
据说python是传值的,这种必须要用boost::python::list?
求解
似乎不是boost包装的问题
似乎python就是不能传引用?
poiuytrewq_2010 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 poiuytrewq_2010 的回复:]
引用 3 楼 poiuytrewq_2010 的回复:
引用 1 楼 angel_su 的回复:
传引用适合自己设计的类或结构,基础类型要稍微包装一下,譬如简单定义另外一个函数来呼叫原函数:
int _xxx(int _x){xxx(&_x)};然后def("xxx",_xxx)...

xxx(&_x)传递的是_x的地址,要传的是一个引用,在C++里编译报错,无法将int* 转化为int&,该怎么设计?

我的原函数是void xxx(int& x),是没有返回值的。你的这个方法对一个参数可能可以。
那如果我的函数是void xxx(int& x, int &y, int& z, int& w)呢,我在python里定义4个变量,我希望调用封装的xxx函数, 能得到四个数的结果,该怎么办呢?
[/Quote]
谢了,分给你
poiuytrewq_2010 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 poiuytrewq_2010 的回复:]
引用 1 楼 angel_su 的回复:
传引用适合自己设计的类或结构,基础类型要稍微包装一下,譬如简单定义另外一个函数来呼叫原函数:
int _xxx(int _x){xxx(&_x)};然后def("xxx",_xxx)...

xxx(&_x)传递的是_x的地址,要传的是一个引用,在C++里编译报错,无法将int* 转化为int&,该怎么设计?
[/Quote]
我的原函数是void xxx(int& x),是没有返回值的。你的这个方法对一个参数可能可以。
那如果我的函数是void xxx(int& x, int &y, int& z, int& w)呢,我在python里定义4个变量,我希望调用封装的xxx函数, 能得到四个数的结果,该怎么办呢?
angel_su 2009-11-18
  • 打赏
  • 举报
回复
用ctypes模块操作应该i简单一点吧。要用boost python的话,源码里用个类或结构封装一下,譬如:
struct data
{
int x, y, z, w;
void xxx(void) {::xxx(x,y,z,w);}
};

模块宏里定义:
class_<data>("data")
.def("xxx", &data::xxx)
.def_readwrite("x", &data::x)
.def_readwrite("y", &data::y)
.def_readwrite("z", &data::z)
.def_readwrite("w", &data::w);

用的时候,可按下面测试:
import modulename
a = modulename.data()
a.xxx()
print a.x, a.y, a.z, a.w
thy38 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 angel_su 的回复:]
传引用适合自己设计的类或结构,基础类型要稍微包装一下,譬如简单定义另外一个函数来呼叫原函数:
int _xxx(int _x){xxx(&_x)};然后def("xxx",_xxx)...
[/Quote]同意,Boost也不是万能的,还是有很多它不能包装的东西。
angel_su 2009-11-17
  • 打赏
  • 举报
回复
啊...明显参数错了,也漏返回值。试试更正函数体为{xxx(_x);return _x;}
poiuytrewq_2010 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 angel_su 的回复:]
传引用适合自己设计的类或结构,基础类型要稍微包装一下,譬如简单定义另外一个函数来呼叫原函数:
int _xxx(int _x){xxx(&_x)};然后def("xxx",_xxx)...
[/Quote]
xxx(&_x)传递的是_x的地址,要传的是一个引用,在C++里编译报错,无法将int* 转化为int&,该怎么设计?
angel_su 2009-11-17
  • 打赏
  • 举报
回复
传引用适合自己设计的类或结构,基础类型要稍微包装一下,譬如简单定义另外一个函数来呼叫原函数:
int _xxx(int _x){xxx(&_x)};然后def("xxx",_xxx)...

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧