如何防止boost::python::extract<float>接受int

1 投票
1 回答
781 浏览
提问于 2025-04-16 05:00

我正在使用 boost::python::extract<> 来把 boost::python::list 中的项目转换成浮点数(float)。我遇到的问题是关于 Python 中的整数(int)——extract<float> 似乎把整数转换成浮点数当作有效的转换,但我只想要真正的浮点数对象。有没有办法让 extract<> 更严格一点?

extract<float> value(o);
if (value.check()) {
  // This is true both for floats and ints
  a = value();
}

1 个回答

1

我很确定你不能让 extract<float> 不把整数转换成浮点数。

你可以做的是查询被包装的 PyObject

const PyObject* pyo = o.ptr();
if (PyFloat_Check(pyo))
{
    // True only for floats.
    a = extract<float>(o);
}

撰写回答