使用BOOST将Python浮点数转换为C++双精度数

2 投票
1 回答
1775 浏览
提问于 2025-04-18 18:27

我刚开始接触Python和C++的接口。在一个Python文件里,我有一个包含列表和浮点数的字典。我想把这些Python对象提取到C++的变量中。我可以把列表提取到向量变量里,但对于浮点数类型却做不到。

这是我在dict.py里的字典:

ATM__INTERPOLATION_CUBE = {
   "xOrigin": xOrigin,

   "yOrigin": yOrigin,

    "zOrigin": zOrigin,

    "xEnd"   : xEnd,

    "yEnd"   : yEnd,

    "zEnd"   : zEnd,

    "point_xdensity":point_xdensity,

    "point_ydensity":point_ydensity,

    "point_zdensity":point_zdensity,

    "short_Space_x" : 0.25,

    "short_Space_y" : 0.25,

    "short_Space_z" : 0.25}

ATM__TYPE = "3D_CUBE"

在我的C++脚本中,我创建了一个名为myconfig的Python字典类型的对象。

python::dict myconfig = ctl->scanConfig("ATM__INTERPOLATION_CUBE", python::dict(), True);

然后我创建了一个Python列表,并把每个列表存储到一个新的Python列表中。

>

python::list xOrigin_list(myconfig["xOrigin"]);
>python::list yOrigin_list(myconfig["yOrigin"]);

接着,我使用循环把这个Python列表提取到我的C++向量变量中。

> for(init;condt;incr)
   > xOrigin.push_back(python::extract <double>(xOrigin_list[i]));
   > yOrigin.push_back(python::extract<double>(yOrigin_list[i]));

但是上面的过程对浮点数或长整型不适用 :(

python::long short_Space_x_fl(myconfig["short_Space_x"]);

> short_Space_x = python::extract<double>(short_Space_x_fl);

这给我带来了错误。有人能告诉我如何从Python提取浮点数或长整型的值,并存储到C++的双精度变量中吗?

var.cc:18:11: error: expected unqualified-id before ‘long’

提前谢谢大家!

1 个回答

2

只有当你想把一个列表提取到一个向量里时,上面的用法才有效。但是如果只是提取单个数据(比如整数、浮点数或长整型),那么提取的语法就很简单了。

double var_name = python::extract<double>(python_dict_obj["python_key"]);

这段代码会把字典中指定键的浮点值存储到C++的一个变量里。

撰写回答