我有一个用Python类型包装的C ++类(Scenario
):
struct PyScenario {
PyObject_HEAD
Scenario scen;
};
我想向Python脚本公开Scenario
的一些私有成员-而不使用显式的getter / setter函数:
static PyMemberDef scenarioMembers[] {
{
(char *)"a",
T_DOUBLE, offsetof(PyScenario, scen._a),
"The a"
},
{
(char *)"b",
T_INT, offsetof(PyScenario, scen._b),
"The b"
},
NULL
};
不幸的是,当我编译上面的代码时,出现类似'double Scenario::_a' is private within this context
的错误。
我不想公开_a
和_b
,所以我尝试声明PyMemberDef
为friend
的{{1}}:
Scenario
不幸的是,这没有帮助...正确的方法是什么?
答案 0 :(得分:1)
您正在做的一个基本问题是(大概)全局变量的初始化程序在全局上下文中。初始化程序不是类的一部分,也不是函数的组成部分,因此它不能成为任何事物的朋友。
您应该使变量成为function-static
变量。包含变量的函数可以成为该类的朋友。
PyMemberDef *PyMemberInitializers()
{
static PyMemberDef scenarioMembers[] {
{
(char *)"a",
T_DOUBLE, offsetof(PyScenario, scen._a),
"The a"
},
{
(char *)"b",
T_INT, offsetof(PyScenario, scen._b),
"The b"
},
NULL
};
return scenarioMembers;
}