По какой-то причине попытка передать указатель на эту функцию в произвольную функцию приводит к следующей ошибке:
1>c:\... : error C2664: 'PyArg_ParseTuple' : cannot convert parameter 3 from 'int (__cdecl *)(PyObject *,void *)' to '...'
1> Context does not allow for disambiguation of overloaded function
PyArg_ParseTuple(args, "O&O&:CreateWindow",
&Arg_Size2U<1>, &size,
&Arg_String<2>, &title);
Я не уверен, в чем проблема, поскольку функция шаблона не перегружена, а параметры шаблона определены явно, поэтому не возникает вопроса, для какой функции передавать указатель для ...
Есть ли способ обойти это, что не требует создания большого количества версий для каждой функции преобразования аргументов, но все же может иметь номер аргумента в исключении, если есть ошибка? (Еще лучше какой-то способ передать номер аргумента в качестве пареметра, чтобы в моей dll не было нескольких копий функции.)
EDIT:
Это также может привести к ошибкам компиляции. Нет ли способа создать указатель на функцию-шаблон или мне нужно делать это отдельно от обычных функций?
int (*sizeConv)(PyObject *,void *) = Arg_MakeSize2U<1>;
1>c:\... : error C2440: 'initializing' : cannot convert from 'int (__cdecl *)(PyObject *,void *)' to 'int (__cdecl *)(PyObject *,void *)'
1> None of the functions with this name in scope match the target type
Функция объявлена как:
template<int ARG> int Arg_MakeSize2U(PyObject *obj, void *out)
EDIT2:
добавление адреса оператора дало еще одну различную ошибку ...
int (*sizeConv)(PyObject *,void *) = &Arg_MakeSize2U<1>;
1>c:\... : error C2440: 'initializing' : cannot convert from 'overloaded-function' to 'int (__cdecl *)(PyObject *,void *)'
1> None of the functions with this name in scope match the target type