在某些C ++ 98代码中(意思是没有,使用std::function
不是一个选项),我发现了以下构造:
class someClass
{
public:
typedef void callback();
void setCallback(callback c)
{
mCallback = c;
}
void callCallback()
{
if (mCallback)
mCallback();
}
private:
callback *mCallback;
};
这让我很困惑。我习惯将回调函数作为函数指针传递,所以我希望setCallback
将(*callback)()
作为参数。
但是,上面的代码似乎有效,并且编译时没有任何(相关的)警告。
有人能告诉我这里发生了什么吗?我的回调函数是否作为函数指针隐式传递?使用它代替函数指针是个好主意吗?
我唯一能找到的是这种结构会导致“parameter-declaration-clause”歧义(C ++ 98 8.3p7)。这是唯一的缺点吗?有什么好处吗?
答案 0 :(得分:0)
与数组类似,函数类型的参数实际上是一个指向该类型的指针。