Я использую 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?
Задача ещё не решена.
Других решений пока нет …