2
在一些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)()
作为参数。
但是,上面的代码似乎工作,并编译没有任何(相关)的警告。
有人能告诉我这里发生了什么吗?我的回调函数是否作为函数指针隐式传递?使用它而不是函数指针是个好主意吗?
我唯一能找到的就是这个结构导致了“参数声明子句”的模糊性(C++ 98 8.3p7)。这是唯一的缺点吗?有什么好处吗?
函数类型调整为参数声明中函数类型的指针 –
当函数类型被用作函数参数类型时,它被调整为指针函数类型,所以'setCallback'可以同样被调用声明为'void setCallback(callback * c)'。 (函数类型和数组类型在本文和相关方面非常相似。) –
在规范中是否有任何对此的引用?据我所知,这在C中不存在... – Bitbored