如何将函数传递给构造函数,然后将其设置为变量



我不明白我做错了什么。我试图将一个函数传递到构造函数中,将该函数设置为一个变量,然后在以后调用该变量。(像回调一样(

我得到的错误是";没有匹配的构造函数";既然void不是回调。。。但我认为回调只是一个返回void的方法?

头文件

class Cars {
typedef void *callback();
public:
Cars(callback* method);
private:
callback* method;
void trigger();
}

类文件

Cars::Cars(callback method){
this->method = method;
}
void Cars::trigger() {
method();
}

主文件

void doSomething() {
// does something
}
Cars car = Cars(doSomething());

这里有几个问题。

typedef void *callback();

这声明callback是一个返回指向void的指针的函数。

Cars(callback* method);

因此,构造函数获取一个指向函数的指针,该函数返回一个指向void的指针。您的明显意图是使用指向返回void的函数的指针,而不是指向void的指针。因此,typedef应为:

typedef void callback();

然而,一些人发现最终结果有点令人费解。相反,使用它更清楚:

typedef void (*callback)();
Cars(callback method);

这是同样的事情,但稍微清晰一点。但这并不是唯一的问题。

void doSomething() {
// does something
}

这声明并定义了一个返回void的函数。

Cars car = Cars(doSomething());

给定上面的定义,在C++中,表达式doSomething()显然意味着对该函数的调用,它生成void结果,然后将其传递给Cars构造函数。当然,这不是你想要做的。相反,正确的语法是:

Cars car = Cars(doSomething);

Cars car = Cars(&doSomething);

不管你喜欢什么。单独声明的函数的名称计算为指向该函数的指针(无论是否带有显式&(。

相关内容

最新更新