使用 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 中很常见(缺乏类型安全的泛型编程)
我在使用 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 中很常见(缺乏类型安全的泛型编程)