查找boostpython对象的类型 我一直在将Python嵌入C++中,我想知道是否有一种方法可以找到 boost::python::object的类型,它是执行python模块的函数后的结果。我的代码如下所示: boost::python::object module_ = boost::python::import("..libName"); boost::python::object result_ = module_.attr("..functionName")(arg1, arg2,...); //suppose if the result is int, int a_ = boost::python::extract<int>(result_); boost::python::object module\uuz=boost::python::import(“…libName”); boost::python::对象结果=模块属性(“…函数名”)(arg1,arg2; //假设结果为int, inta=boost::python::extract(结果);
从上面的代码片段中,我想知道是否有方法找到类型查找boostpython对象的类型 我一直在将Python嵌入C++中,我想知道是否有一种方法可以找到 boost::python::object的类型,它是执行python模块的函数后的结果。我的代码如下所示: boost::python::object module_ = boost::python::import("..libName"); boost::python::object result_ = module_.attr("..functionName")(arg1, arg2,...); //suppose if the result is int, int a_ = boost::python::extract<int>(result_); boost::python::object module\uuz=boost::python::import(“…libName”); boost::python::对象结果=模块属性(“…函数名”)(arg1,arg2; //假设结果为int, inta=boost::python::extract(结果);,c++,python,boost-python,C++,Python,Boost Python,从上面的代码片段中,我想知道是否有方法找到类型 在提取结果之前对其进行排序。在上面的代码中,结果可能是任何类型,如list、tuple…有几种方法可以获取对象的类型。使用哪一种取决于您希望结果的格式。您可以使用result.attr(“\uuuu class\uuuu”)将类作为boost::python::object获取。您还可以使用来检查它是否是您认为的类型。最后,您可以使用获取其类型作为PyObject*您可以尝试以下方法 std::vector<std::string> l
在提取结果之前对其进行排序。在上面的代码中,结果可能是任何类型,如list、tuple…有几种方法可以获取对象的类型。使用哪一种取决于您希望结果的格式。您可以使用
result.attr(“\uuuu class\uuuu”)
将类作为boost::python::object获取。您还可以使用来检查它是否是您认为的类型。最后,您可以使用获取其类型作为PyObject*您可以尝试以下方法
std::vector<std::string> list_to_vector(boost::python::list& l)
{
for (int i = 0; i < len(n); ++i)
{
boost::python::extract<boost::python::object> objectExtractor(l[i]);
boost::python::object o=objectExtractor();
std::string object_classname = boost::python::extract<std::string>(o.attr("__class__").attr("__name__"));
std::cout<<"this is an Object: "<<object_classname<<std::endl;
}
...................................................
...................................................
}
std::vector list_to_vector(boost::python::list&l)
{
对于(int i=0;i std::cout因为您似乎想检查它是否为整数,所以可以使用:
boost::python::extract n(o);
如果(n.检查())
//它是一个整数,或者至少可以转换为一
其他的
//不是整数
报告说:
extract x(o);构造一个提取器,其check()成员函数
可用于询问转换是否可用而不会导致
要抛出的异常
这听起来好像一个浮点数可以转换成整数,但我试过了,却没有。换句话说,我真的不相信它每次都做对了
对于内置类型,在本例中是整数,我认为使用它更安全,但至少当我在这里测试一些代码时,它不是立即可用的
换句话说,如果您需要确定非Python内置对象的类型,我会继续使用(但我个人更希望有一个干净的Boost Python代码库,而不是混合使用)正如你所说的,它不可靠。extract将乐于接受整数是的。自从这篇文章发表以来,我意识到extract
将尝试在兼容类型之间自动转换。确保它完全是整数的方法是使用PyInt\u Check
。为我工作,我得到了“N5boost6python3api5proxyINS1\u 13项目”策略请参阅“使用typeid时…”。。。
boost::python::extract<int> n(o);
if ( n.check() )
// it's an integer, or at least convertible to one
else
// not an integer