使用 LLVM 从 const void * 转换为模板类型时出现问题
Having issues casting from const void * to template type with LLVM
我在使用 LLVM 编译以下函数时遇到问题,该函数在 MSVC 中编译得很好。
template<typename Fn>
Fn GetVFunction(const void *instance, std::size_t index) {
const auto vtable = *reinterpret_cast<const void***>(const_cast<void*>(instance));
return reinterpret_cast<Fn>(vtable[index]);
}
发生以下错误:
"reinterpret_cast from 'const void *' to 'SDK::UObject *(*)(SDK::UClass *)' casts away qualifiers"
我环顾四周,建议执行以下操作-
return const_cast<Fn>(reinterpret_cast<const Fn>(vtable[index]));
这导致了同样的问题。
任何帮助将不胜感激!
由于问题发生在模板实例化时,您的错误是不可重现的,但我认为以下内容应该有效
template<typename Fn>
Fn GetVFunction(const void *instance, std::size_t index) {
auto vtable = reinterpret_cast<void**>(const_cast<void*>(instance));
return reinterpret_cast<Fn>(vtable[index]);
}
请注意,void*
操作通常是C++编码不佳的标志(因为它容易出错(,但在 C 中很常见(缺乏类型安全的泛型编程(
相关文章:
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 指针问题:从不兼容的类型"int"分配给"int *"
- 特征返回类型的 pybind11 问题
- 对齐C++字符串类型问题 std::字符串到 TStr
- C 中的类型问题
- dllimport类型问题
- 变量类型问题
- 并排定义指针和类型问题
- C++对数据类型问题
- B-树搜索引用子数据类型问题
- 协议缓冲区,让C#与C++对话:类型问题和模式问题
- 传递类成员函数:类型问题
- 使用受限函数时,尾随返回类型问题
- 如何正确使用模板?我在使用模板时遇到数据类型问题<>
- 链表输入类型问题
- 无序映射:自己的值类型问题
- 将windows c++项目链接到boost命令行体系结构类型问题
- 有数据类型问题的c++阶乘函数
- C++返回类型问题