dynamic_cast宏救援空

dynamic_cast macro rescue NULL

本文关键字:cast dynamic      更新时间:2023-10-16

我想在生成的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; }