Abh*_*nia 7 c++ dynamic-cast compilation llvm clang
我看到一个奇怪的失败,dynamic_cast它NULL在clang编译器上返回.但是相同的代码正在使用gcc环境.
你能指点我可能是根本原因吗?dynamic_castllvm和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;
}
Run Code Online (Sandbox Code Playgroud)
还有一个观察:用gcc
if (typeid(*(*it)) == typeid(T))
Run Code Online (Sandbox Code Playgroud)
正如预期的那样完美地工作但是有铿锵声
if (typeid(*(*it)) == typeid(T))
Run Code Online (Sandbox Code Playgroud)
比较显示不同的行为..不确定为什么这个不同.
谢谢
小智 0
对于这样的代码,一个好主意是静态地确保类 T 派生自 MsgList。使用 boost,可以这样完成:
BOOST_STATIC_ASSERT((boost::is_base_and_衍生::值));
| 归档时间: |
|
| 查看次数: |
1147 次 |
| 最近记录: |