我在使用clang / llvm编译以下代码时遇到问题:
头文件:
inline void**& getvtable(void* inst, size_t offset = 0)
{
return *reinterpret_cast<void***>((size_t)inst + offset);
}
inline const void** getvtable(const void* inst, size_t offset = 0)
{
return *reinterpret_cast<const void***>((size_t)inst + offset);
}
template<typename Fn>
inline Fn getvfunc(const void* inst, size_t index, size_t offset = 0)
{
return reinterpret_cast<Fn>(getvtable(inst, offset)[index]); //Error appears here
}
使用gcc进行编译可以正常工作。 但是,使用clang会产生以下错误:
reinterpret_cast from 'const void *' to 'model_t *(*)(void *)' casts away qualifiers
感谢您的帮助!谢谢!