gpt4 book ai didi

C++函数指针问题

转载 作者:行者123 更新时间:2023-11-30 04:40:42 26 4
gpt4 key购买 nike

出于某种原因,尝试将指向此函数的指针传递给可变参数函数会产生以下错误:

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 中就没有该函数的多个拷贝。)

编辑:这似乎也会导致编译错误。没有办法创建指向模板函数的函数指针,还是我需要以不同于普通函数的方式来创建?

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)

编辑2:添加运算符的地址给出了另一个不同的错误...

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

最佳答案

这在 VC++ 2008 中编译得很好:

struct PyObject;

template<int ARG> int Arg_MakeSize2U(PyObject *obj, void *out)
{
return 0;
}

int main()
{
int (*sizeConv)(PyObject *,void *) = &Arg_MakeSize2U<1>;
sizeConv(0, 0);
}

所以你一定在做一些不同的事情。也许你确实有过载,但你没有注意到。发布更多上下文有助于更好地诊断问题。

关于C++函数指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/839990/

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