【发布时间】:2017-03-30 20:32: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<strx* instance, int value>无效。你的意思是std::function<int (strx*, int)>? -
@aschepler 是的,我已经修好了,谢谢。
-
你不需要在 C++ 中使用
typedef。只需使用struct strx { ... },因为类和结构名称会自动成为类型。