C ++:初始化结构和设置功能指针

时间:2013-12-16 23:30:38

标签: c++ function pointers struct initialization

我正在尝试使用函数指针初始化结构,但是除非使用全局函数完成,否则我无法执行此操作。以下代码有效:

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 ++结构函数指针初始化”之类的事情无济于事)

2 个答案:

答案 0 :(得分:4)

这是因为当您将该函数作为该类的成员时,它将不再是float (*)(float)类型,而是float (MyClass::*)(float)

调查std::functionstd::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;