CPython API与C++类一起摇摆
CPython API jiving with C++ class
我正在尝试在C++类中使用C/Python API中定义的structs。具体来说,我试图为PyMethodDef
和PyMemberDef
定义一个结构数组(文档在这里):
对于PyMethodDef
,我能够在类头中定义一个静态数组,并在实现文件中声明它。然而,对PyMemberDef
执行同样的操作会导致以下错误:
error: elements of array 'PyMemberDef members_ []' have incomplete type
error: storage size of 'members_' isn't known.
我想我能理解为什么PyMethodDef
有效,而PyMemberDef
无效。在Python源代码中,PyMethodDef
定义如下:
struct PyMethodDef {
...
...
};
typedef struct PyMethodDef PyMethodDef;
而CCD_ 8被定义为:
typedef struct PyMemberDef {
...
...
} PyMemberDef;
我以PyMethodDef
在代码中的方式定义了PyMemberDef
,并确认它的编译没有错误,从而确认了这就是问题的原因。然而,我不知道如何纠正这一点。我宁愿不硬编码,自己重新定义它。希望这一点足够清楚。我可以根据要求提供更多细节。谢谢
如果您尝试使用clang,它会给您一个更有意义的错误消息,如:
pymountboot.cxx:45:20: error: variable has incomplete type 'PyMemberDef'
static PyMemberDef foo_members[] = {
^
/usr/include/python2.7/object.h:381:12: note: forward declaration of 'PyMemberDef'
struct PyMemberDef *tp_members;
^
1 error generated.
因此,这里似乎并没有实际声明PyMemberDef
。
一个快速的grep显示它是在structmember.h
中声明的,而该文件不包括在Python.h
中。
然后快速浏览一下关于定义新类型的Python文档,您会注意到该示例以开头
#include <Python.h>
#include "structmember.h"
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- 如何将AERT_Allocate与 std:vector 一起使用
- 如何使我的 sizeof sum 结构与空参数包一起工作
- CPython API与C++类一起摇摆