如何获取offsetof()私有类成员?

时间:2018-09-05 19:10:40

标签: python c++ python-3.x c++11 c++14

我有一个用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,所以我尝试声明PyMemberDeffriend的{​​{1}}:

Scenario

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

1 个答案:

答案 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;
}