dynamic_cast 宏救援 NULL

dynamic_cast macro rescue NULL

我想在生成的 C++ 代码中使用 dynamic_cast 内在函数。宏定义如下:

#define jcast(T, v) (dynamic_cast<T*>(v))

不幸的是,因为生成代码,所以会出现这种情况:

foo(jcast(UWiseObject, NULL));

编译器说:

error: `nullptr_t` is not a pointer.

在这种情况下,我该如何拯救NULL?我真的想要这样的东西:

if (v) 
    return dynamic_cast<T*>(v);
else
    return NULL;

嗯,这就是适合您的宏。改为编写真正的 C++:

template<typename T, typename U>
T* jcast(U* u) { return dynamic_cast<T*>(u); }
template<typename T>
T* jcast(nullptr_t) { return nullptr; }