将对象函数转换为函数指针

Convert object function to function pointer

本文关键字:函数 指针 转换 对象      更新时间:2023-10-16

我正在尝试将对象函数转换为函数指针,但无法获取它,我做了这样的事情,简单的例子:

typedef struct
{
int v1;
int DoSome(int a)
{
return v1 * a;
}
} strx;

int main()
{
strx a; // instance...
a.v1 = 2;

std::function<int(strx* instance, int value)> DoSome = std::mem_fn(&strx::DoSome);
cout << DoSome(&a, 4) << endl; // 16 ok 
int(*pDoSome)(strx* instance, int value) = (int(*)(strx*, int))std::mem_fn(&strx::DoSome); // syntax error
// ptr method...
pDoSome(&a ,4);
return 0;
} 

我得到了类似的东西:

main.cpp [错误] 从类型"std::_Mem_fn"到类型"int ()(strx, int)"的强制转换无效

如何正确进行铸造?

你不能。 这就是为什么std::function比指向函数的指针更灵活的原因。

如何正确进行铸造?

你不能。对象指针和函数指针是完全不同的概念。只有nullptr可用于初始化这两种类型的指针。否则,不能保证它们兼容。

我建议坚持std::function.

如果必须具有函数指针,则必须使用类的非成员函数或static成员函数。

例如

int doSomeFunction(strx* instance, int value)
{
// Use instance any way you please.
// ...
//
return 0;
}
int main()
{
strx a; // instance...
a.v1 = 2;
int(*pDoSome)(strx* instance, int value) = doSomeFunction;
// ptr method...
pDoSome(&a ,4);
return 0;
}