我是 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/