C++ - 设置等于参数的函数

Eva*_*ard 1 c++ parameter-passing

我对c ++很陌生,但我正试图移植我已经开始的flash游戏.我试图将函数作为参数传递,然后设置一个等于该函数的属性.

class Param
{
    private:
    float function();
    float value;

    public:
    Param(float (func)());
    Param(float (func)(), float value);
    ~Param();

    void update();
};
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的东西:

Param::Param(float (func)()) {
    this.function = func;
}
Run Code Online (Sandbox Code Playgroud)

但似乎并不喜欢这样.我不确定它是否需要成为指针,我想在Param实例化时指定它而不是传递可能被删除的引用.

编辑:如果有人也可以回答,有没有办法让这些函数可选择传递?如果在没有指定的情况下默认为默认的函数?

dev*_*fan 5

通常,你需要一个指针

class Param
{
    private:
    float (*function)();
    float value;

    public:
    Param(float (*func)());
    Param(float (*func)(), float value);
    ~Param();

    void update();
};
Run Code Online (Sandbox Code Playgroud)

不需要实际调用中的&参数,
您只需传递函数的纯名称
(带或不带&,但不带任何括号!)

但是:传递的函数不能成为某个类实例的一部分.
只有"原始"函数(可能在名称空间中)或静态类方法.
使用std :: function来启用类实例方法和lambdas等:

class Param
{
    private:
    std::function<float()> function;
    float value;
    public:
    Param(std::function<float()> func);
    Param(std::function<float()> func, float value);
    ~Param();

    void update();
};
Run Code Online (Sandbox Code Playgroud)

无论如何都可以通过如上所述的正常功能.
(看一下std :: bind&Co来了解如何传递类方法)