我看到一个奇怪的失败dynamic_cast
正在返回NULL
在 clang 编译器上。但相同的代码可以在 gcc 环境下运行。
您能否指出根本原因是什么?之间可能有什么区别dynamic_cast
关于 llvm 和 gcc。
我正在使用两个编译器的默认行为,我认为默认情况下启用 RTTI。
template<typename T> T*
find_msg_of_type(
MsgList *list
) {
T* msg = NULL;
if (list) {
for (std::vector<MsgList*>::iterator it = list->element.begin();
it != list->element.end();
it++) {// MsgList can be list of objects build with GSoap.
if (typeid(*(*it)) == typeid(T)) {
msg = dynamic_cast<T*>(*it); // Failing on clang but this same code is working with gcc compiler.
break;
}
}
}
return msg;
}
另一项观察:使用 gcc
if (typeid(*(*it)) == typeid(T))
工作正常,但有 clang
if (typeid(*(*it)) == typeid(T))
比较显示出不同的行为..不确定为什么会有所不同。
Thanks
对于这样的代码,一个好主意是静态地确保类 T 派生自 MsgList。使用 boost,可以这样完成:
BOOST_STATIC_ASSERT((boost::is_base_and_衍生::值));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)