atanırsa kontrol ediliyor. Bunu yapmak için !
-operator bekliyordum, ancak işlev nullptr_t
türünde bir şey atandığında çalışır gibi görünüyor. bir <code>std::function</code> içine atanmış işlev işaretçisi bir <code>nullptr</code> olup olmadığını kontrol için herhangi bir yolu varsa bir std :: işlevi merak ediyorum bir 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
şimdilik bu geçici bir çözüm için bu yardımcı fonksiyon yazdım. (Görünüşte madende de ve) senin
std::function
uygulamasında bir hata var
template<typename T>
void AssignToFunction(std::function<T> &func, T* value)
{
if (value == nullptr)
{
func = nullptr;
}
else
{
func = value;
}
}
Haklısınız, "tip' nullptr_t' atanan bir şey" ne demek? Cevapları ilk okuduğumda, başlatma ve atama arasında bir ayrım yaptığınızı sanıyordum, ama şimdi başka türlü görüyorum. –
__cdecl' 'gibi taşınabilir olmayan bok kaçının ve' HWND' örneklerde, sorunuz şey Windows'a özgü dayanmaz, bu nedenle bu tür boşluğu 'gibi bir işlev türünü kullanmak için hiçbir neden yoktur()' o olabilir herhangi bir platformda herkes tarafından test edildi. –
Windows özgü parçaları kaldırıldı ve "nullptr_t tip" olarak değiştirin –