Cem*_*ncu 0 c++ function-pointers
我试图比较两个函数的地址是否相等.我存储的函数的类型是已知的.这个系统通常有效,考虑下面的代码(不是从程序中写成样本):
virtual bool compare(void *fn2) {
void (*fn)(int);
if(fn==fn2)
return true;
}
Run Code Online (Sandbox Code Playgroud)
但是,当考虑类函数时,相同的方法不起作用.
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;
}
Run Code Online (Sandbox Code Playgroud)
这些函数覆盖了一个公共基类的纯虚函数,类似于以下内容:
virtual bool compare(void*) = 0;
Run Code Online (Sandbox Code Playgroud)
由于我无法在虚拟函数中使用模板<>,因此我没有选择权.有没有办法(无论如何)统一类功能和常规功能?
提前谢谢,Cem
Posix需要能够将函数指针转换为void*.标准C++不支持它.
成员函数指针不是通常意义上的指针,它们更像是偏移(即使对于非虚拟成员函数).
compare即使比较和强制转换有效,您显示的两个实现都将具有未定义的行为,因为它们在指针不比较的情况下无法返回任何内容.而不if(blah == bag){ return true; }只是做return (blah == bah);.
问题源于丢弃必要的类型信息.这通常不是一个好主意.为什么要丢弃所需的类型信息?
解决方法:(1)不要抛弃必要的类型信息,以及(2)重新设计,以摆脱的compare功能.还要注意Roger Pate的评论,看来你似乎在问一个特定的尝试解决方案而不是问题.问题是什么?
干杯&hth.,
| 归档时间: |
|
| 查看次数: |
3211 次 |
| 最近记录: |