gpt4 book ai didi

python - 如何让 offsetof() 成为私有(private)类成员?

转载 作者:行者123 更新时间:2023-11-28 04:33:34 53 4
gpt4 key购买 nike

我有一个用 Python 类型包装的 C++ 类 ( Scenario):

struct PyScenario {
PyObject_HEAD
Scenario scen;
};

我想公开 Scenario 的一些私有(private)成员到 Python 脚本——不使用显式的 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一个friendScenario :

class Scenario {
#ifdef PY_MAJOR_VERSION
friend struct PyMemberDef;
#endif
private:
double _a;
int _b;
....
};

不幸的是,这没有帮助......什么是正确的方法?

最佳答案

你正在做的事情的根本问题是(大概)全局变量的初始值设定项在全局上下文中。初始值设定项既不是类的一部分,也不是函数的组成部分,因此它不能成为任何事物的友元。

您应该使该变量成为函数-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;
}

关于python - 如何让 offsetof() 成为私有(private)类成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52191948/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com