我正在尝试将方法强制转换为void指针,以便我可以将其用作回调方法。
void* pVoidedFunc = &testmethod;
但我收到错误:
error: invalid conversion from int (*)() to void*
方法是:
static int testmethod()
{
return 0;
}
如何将方法转换为void指针?
答案 0 :(得分:1)
该语言不允许将指向函数的指针自动转换为void指针。
以下是C ++草案标准(N3337)关于指针转换(强调我的)的说法:
4.10指针转换
2类型“指向 cv
T
的指针”,“其中T
是对象类型的rvalue,可以转换为右值类型为“指向 cvvoid
的指针。”将“指向 cvT
的指针”转换为“指向的指针” cvvoid
“指向类型为T
的对象所在的存储位置的开头,就好像该对象是T
类型的派生程度最高的对象(1.8) (即,不是基类子对象)。
功能不是对象。这在:
中说明1.8 C + +对象模型
1 C ++程序中的构造创建,销毁,引用,访问和操作对象。 对象是存储区域。 [注意:函数不是对象,无论它是否以对象的方式占用存储。 ]
对象类型定义为:
3.9类型
9 对象类型是一种(可能是cv限定的)类型,它不是函数类型,不是引用类型,也不是void类型。