0

我必须使用 boost python 库检查传递的对象类型是否存在于 python 中:

// bp = boost::python
bool TypeExists(const std::string &typeName)
{
    bp::object ret = bp::exec(
            (boost::format("'%1%' in globals()") % typeName).str().c_str()
    );
    return bp::extract<bool>(ret);
}

所以,在这段代码中,我运行 python 表达式,它看起来像:'TypeName' in globals(). 这应该返回布尔类型的对象。但是提取总是返回 0。类型 100% 存在,因为在TypeExists调用后的下一行中,我创建了这种类型的对象。怎么了?

4

1 回答 1

2

问题是exec执行 Python 代码并返回执行结果(无论是执行还是出错);并且您需要表达式评估的结果。

您必须在此处使用eval来获取表达式评估结果。

bp::object ret = bp::eval(...)

这在文档中有所描述。

于 2012-08-10T10:22:09.430 回答