dynamic_cast宏救援NULL

时间:2016-07-06 10:17:55

标签: c++ macros dynamic-cast

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

1 个答案:

答案 0 :(得分:4)

嗯,那是你的宏。写一些真正的C ++:

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