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