Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找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 - Fatal编程技术网

查找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;istd::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