gpt4 book ai didi

c++ - 将类函数指针转换为 void* 或反之

转载 作者:太空宇宙 更新时间:2023-11-04 15:27:56 27 4
gpt4 key购买 nike

我正在尝试比较两个函数的地址是否相等。我的存储函数的类型是已知的。该系统正常工作,请考虑以下代码(作为示例而不是程序编写):

virtual bool compare(void *fn2) {
void (*fn)(int);

if(fn==fn2)
return true;
}

但是,当考虑类函数时,同样的方法不起作用。

virtual bool compare(void *fn2) {
void(__thiscall myclass::*fn)(int);
void *fn2;

if(fn==fn2) //error C2440 type cast: cannot convert void* to void(__thiscall...
return true;
}

这些函数重写了一个公共(public)基类的纯虚函数,类似如下:

virtual bool compare(void*) = 0;

因为我不能在虚拟函数中使用模板<>,所以我没有其他选择。有没有办法(无论如何)统一类函数和常规函数?

提前致谢,杰姆

最佳答案

Posix 需要将函数指针转换为 void* 的能力。标准 C++ 不支持它。

成员函数指针不是普通意义上的指针,它们更像是偏移量(即使对于非虚拟成员函数也是如此)。

即使比较和转换有效,您为 compare 显示的两个实现都将具有未定义的行为,因为在指针比较不相等的情况下它们无法返回任何内容。而不是 if(blah == bag){ return true; } 只需执行 return (blah == bah);

问题源于丢弃必要的类型信息。这通常不是一个好主意。为什么要丢弃所需的类型信息?

解决方案:(1) 不要丢弃必要的类型信息, (2) 重新设计以去掉compare 函数。另请注意 Roger Pate 的评论,您似乎在询问特定的尝试解决方案而不是问题。有什么问题?

干杯,

关于c++ - 将类函数指针转换为 void* 或反之,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4062981/

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