C++ - 将函数设置为等于参数

标签 c++ parameter-passing

我是 c++ 的新手,但我正在尝试移植我已经开始的 Flash 游戏。我一直在尝试将一个函数作为参数传递,然后设置一个等于该函数的属性。

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

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

    void update();
};

我试过类似的方法:

Param::Param(float (func)()) {
    this.function = func;
}

但它似乎并不喜欢那样。我也不确定它是否需要是一个指针,我只想在实例化 Param 时指定它,而不是传递一个可能会被删除的引用。

编辑:如果有人也能回答,有没有办法让这些传入的函数可选?如果没有指定,它会默认为函数吗?

最佳答案

通常,你需要一个指针

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

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

    void update();
};

实际调用中参数的&是不需要的,
你可以只传递函数的纯名称
(有或没有 &,但没有任何括号!)

但是:传递的函数不能是某个类实例的一部分。
只有“原始”函数(可能在命名空间中)或静态类方法。
也使用 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();
};

像上面这样的普通函数无论如何都可以传递。
(查看 std::bind & Co 以了解如何传递类方法)

关于C++ - 将函数设置为等于参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24492026/

相关文章:

r - 如何减少从插入符号传递给 RF 的默认 ntree=500 参数?

c++ - Hadoop管道字数统计:任务ID:尝试状态:FAILED AttemptID:尝试600秒后超时

C++:未使用函数返回值时如何触发编译器错误?

c++ - 如何将 C/C++ 编译为 CP/M-86 可执行文件 (CMD)

c++ - 在单次调用c++中将整个二进制文件读入数组

java - SQL 查询有问题

c++ - 对 Eigen block 的自动引用未按预期运行

parameter-passing - "pass by reference"是糟糕的设计吗?

powershell - 函数参数位置突然表现得很奇怪

java - 不可变和按值传递