查找boost python对象的类型
Find the type of boost python object
我一直将python嵌入到c++中,我想知道是否有办法找到boost::python::对象的类型,该对象是执行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_);
从上面的代码片段,我想知道的是,如果有办法找到的类型在提取结果之前。在上面的代码中,结果_可以是任何类型,如list, tuple…
你可以试试这个
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;
}
...................................................
...................................................
}
既然你似乎想检查它是否是一个整数,你可以使用extract<T> x(o)
:
boost::python::extract<int> n(o);
if ( n.check() )
// it's an integer, or at least convertible to one
else
// not an integer
文档说:
提取x (o);构造一个提取器,其check()成员函数可用于询问转换是否可用而不引起要抛出的异常。
这听起来好像可以将浮点数转换为整数,但我试过了,它没有。换句话说,我真的不相信它每次都能做正确的事情!
对于内置类型,在本例中是整数,我认为使用PyInt_Check
更安全,但至少当我测试这里的一些代码时,它不是立即可用的。
换句话说,如果您需要确定非Python内置对象的类型,我会遵循@Aereaux的建议使用PyObject_IsInstance
。(但我个人更希望有一个干净的Boost Python代码库,而不是混合。)
有几种方法可以获得对象的类型。使用哪一种取决于您想要的结果格式。您可以使用result_.attr("__class__")
来获得类作为boost::python::对象。您还可以使用PyObject_IsInstance函数来检查它是否是您认为的类型。最后,可以使用PyObject_Type函数以PyObject*的形式获取它的类型。
相关文章:
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- C++ 多态模板类,模板类型对象的实例化
- 如何分配适合容纳 T 类型对象的缓冲区(可能过度对齐、可能有运算符 new 等)
- 如何构造一个 std::variant 类型对象,其自身 Templated 和构造函数转发参数
- C++:初始化指向具有不同类型对象的指针数组
- 在类 C++ 中构造的模板类型对象
- 如何将颁发者名称设置为x509_req类型对象
- 将任何数据类型/对象作为参数传递以确定其大小
- 将引用类型对象的数组从C#封送到C++
- <T> 从类型对象创建类型<T1>对象的构造函数
- C++是否有现有的方法来检查对象是否是派生类型对象
- C 模板:创建与现有对象相同的类型对象
- 链接列表中的虚函数 - 多种返回类型(对象)
- 没有适当操作员()的类型对象的呼叫
- 制作垫子类型对象的数组.输出窗口显示同一帧
- 抽象类型对象的分配
- 在std::list中就地创建自定义类型对象
- 接受泛型列表类型对象的参数
- C++-将模板类型对象强制转换为特定的数据类型
- 试图在C++中打印存储在类型对象数组中的信息