我对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
实例化时指定它而不是传递可能被删除的引用。
编辑:如果有人也可以回答,有没有办法让这些函数可以传递?如果在没有指定的情况下默认为默认的函数?
答案 0 :(得分:5)
通常,你需要一个指针
class Param
{
private:
float (*function)();
float value;
public:
Param(float (*func)());
Param(float (*func)(), float value);
~Param();
void update();
};
&对于实际调用中的参数不需要,
你可以传递一个函数的纯名称
(有或没有&amp ;,但没有任何括号!)
但是:传递的函数不能成为某个类实例的一部分 只有“原始”函数(可能在名称空间中)或静态类方法 使用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&amp; Co来了解如何传递类方法)