Как сделать функцию Getter Setter для каждого члена с tp_getset в Python C API?

Я использую Python C API для привязки моего класса в C ++.
Структура PyTypeObject имеет член tp_getset, который может зарегистрировать член класса (типа) Python с помощью его функции-установщика-получателя.

tp_getset — это тип PyGetSetDef.

typedef PyObject *(*getter)(PyObject *, void *);
typedef int (*setter)(PyObject *, PyObject *, void *);

typedef struct PyGetSetDef {
char *name;
getter get;
setter set;
char *doc;
void *closure;
} PyGetSetDef;

И функция get set будет использоваться для этого. (код Python)

test = ModuleName.TestObject()

#setter will called!
test.member = 10

#getter will called!
print(test.member)

Таким образом, этот PyGetSetDef tp_getset может использоваться для регистрации каждого члена с каждой функцией get set.
Но я хочу сделать RegisterFunction для регистрации члена класса с помощью функции get set.

Для этого шаблона нужен тип указателя элемента и его имя.
Я хочу сделать каждую функцию get set для каждого элемента getset def по шаблону.

template<typename MEMBER_POINTER_T, string memberName>
static PyObject* GetFunction(EPN_PyObject* _pSelf, void* _pClosure)
{
//impl the get function
//i need members name...
}

//How should i use template to make Get Set Function
//like below?
PyGetSetDef def[3] =
{
{"X", GetFunction<&Position::X, "X"> ,
SetFunction<&Position::X, "X">, nullptr},
{"Y", GetFunction<&Position::Y, "Y"> ,
SetFunction<&Position::Y, "Y">, nullptr},
{0,0}
}

Но шаблону требуется только постоянная типа int или имя типа … он не может принимать строки.
Как я должен сделать каждый получить набор функций для каждого члена getsetdef?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector