小编Bob*_*Bob的帖子

Python C API:打开PyObject类型

我有一些代码可以将Python与C++接口,但是每次看到它我都认为必须有更好的方法.在C++方面,有一个'variant'类型可以处理固定范围的基本类型 - int,real,string,variant变量等.我有一些代码使用Python API从等效的Python类型转换.它看起来像这样:

variant makeVariant(PyObject* value)
{  
  if (PyString_Check(value)) {
    return PyString_AsString(value);
  }
  else if (value == Py_None) {
    return variant();
  }
  else if (PyBool_Check(value)) {
    return value == Py_True;
  }
  else if (PyInt_Check(value)) {
    return PyInt_AsLong(value);
  }
  else if (PyFloat_Check(value)) {
    return PyFloat_AsDouble(value);
  }
  // ... etc
Run Code Online (Sandbox Code Playgroud)

问题是链式if-else ifs.它似乎是在调用switch语句,或者由类型标识符键入的创建函数的表或映射.换句话说,我希望能够写出如下内容:

  return createFunMap[typeID(value)](value);
Run Code Online (Sandbox Code Playgroud)

基于API文档的略读,直接获取'typeID'的最佳方法并不明显.我知道我可以这样做:

  PyTypeObject* type = value->ob_type;
Run Code Online (Sandbox Code Playgroud)

这显然让我快速了解类型信息,但是使用它与我感兴趣的有限类型集相关的最简洁方法是什么?

c python python-c-api python-c-extension

7
推荐指数
1
解决办法
4577
查看次数

标签 统计

c ×1

python ×1

python-c-api ×1

python-c-extension ×1