最近研究用c++开发Python的库,按照教程,需要给一个结构体赋值,代码如下:
static PyTypeObject Student_Class = {
PyVarObject_HEAD_INIT(NULL, 0)
.tp_name = "python_class.Student",
.tp_itemsize = sizeof(Student),
.tp_dealloc = (destructor)Student_Destruct,
.tp_str = (reprfunc)Student_str,
.tp_flags = Py_TPFLAGS_BASETYPE|Py_TPFLAGS_DEFAULT,
.tp_doc = "Student类",
.tp_methods = student_method_def,
.tp_members = Student_Member,
.tp_init = (initproc)Student_init,
.tp_new = Student_new,
};
其中的PyTypeObject结构体是一个很大很大很大很大很大的结构体,由Python那边的头文件定义完毕。
在c++下面,貌似用句点来定义个别属性是不支持的么?vs2019编译器报错E0029:应输入表达式。
而转为c语言方式就不会报错,但转为c语言之后上面的代码:
static PyMemberDef Student_Member[] = {
{"name", T_OBJECT_EX, offsetof(Student, name), 0, "姓名"},
{"age", T_INT, offsetof(Student, age), 0, "年龄"},
{"sex", T_OBJECT_EX, offsetof(Student, sex), 0, "性别"},
{"id", T_FLOAT, offsetof(Student, id), 0, "学号"},
{NULL},
};
里面的offsetof会报错“表达式必须含有常量值”,但按照python官方教程,这样写并没有错。难道是编译器的问题吗?
求大佬解答。