我想知道是否有任何方法來檢查您分配到std::function
的函數指針是否爲nullptr
。我期待!
操作員這樣做,但它似乎只有在函數被分配了nullptr_t
類型的東西時才起作用。檢查std ::函數是否分配給nullptr
typedef int (* initModuleProc)(int);
initModuleProc pProc = nullptr;
std::function<int (int)> m_pInit;
m_pInit = pProc;
std::cout << !pProc << std::endl; // True
std::cout << !m_pInit << std::endl; // False, even though it's clearly assigned a nullptr
m_pInit = nullptr;
std::cout << !m_pInit << std::endl; // True
我寫了這個幫助函數來解決這個問題。
template<typename T>
void AssignToFunction(std::function<T> &func, T* value)
{
if (value == nullptr)
{
func = nullptr;
}
else
{
func = value;
}
}
你的意思是「分配了某種類型的'nullptr_t'」,對吧?當我第一次讀到答案時,我認爲你正在區分初始化和賦值,但是現在我看到了另外一種情況。 –
在示例中,請避免像'__cdecl'和'HWND'這樣的非可移植垃圾,您的問題不依賴於任何特定於Windows的內容,所以沒有理由不使用函數類型,如void()由任何平臺上的任何人測試。 –
我刪除了特定於Windows的部分,並將其更改爲「type nullptr_t」 –