我正在尝试使用函数指针初始化结构,但是除非使用全局函数完成,否则我无法执行此操作。以下代码有效:
float tester(float v){
return 2.0f*v;
}
struct MyClass::Example{
typedef float(*MyFunc)(float);
MyFunc NameOfFunc;
float DoSomething(float a){
return NameOfFunc(a);
}
};
struct Example e;
e.MyFunc = tester;
我的问题是每当我尝试使用tester
函数执行此操作时,MyClass
代码中的函数不再有效。换句话说,我将测试仪功能更改为:
float MyClass::tester(float v){
return 2.0f*v;
}
赞赏任何和所有帮助(包括链接)!我已经尝试谷歌搜索问题,但我不确定要搜索什么(我已经尝试过诸如“类中的C ++结构函数指针初始化”之类的事情无济于事)
答案 0 :(得分:4)
这是因为当您将该函数作为该类的成员时,它将不再是float (*)(float)
类型,而是float (MyClass::*)(float)
。
调查std::function
和std::mem_fn
以解决这些问题。
示例:
struct foo {
float bar(int x, int y) {}
};
// This works
std::function<float(int, int)> func = std::mem_fn(&foo::bar);
答案 1 :(得分:2)
如果您希望NameOfFunc
指向float MyClass::tester(float v)
,那么Myfunc
声明必须是,
typedef float (MyClass::*MyFunc)(float);
但是它不能指向float tester(float v)
我认为你不能有一种可以指向其中的类型。
也不应该e.MyFunc = tester;
是e.NameOfFunc = tester;
?