在学习Vulkan时,我在VulkanCookbook中遇到了一些代码。在VulkanCookbook中,作者编写代码来手动导入Vulkan函数和类。好吧,我一直在慢慢地将它转换为Vulkan的LunarG SDK,并且我在64位VkFence中遇到了一个问题,它将VkFence_T *键入到VkFence_T *中,这很好,除了32位外,它的typedef是dint64_t,对于VkDestroyer问题,它使用类似的代码如下使用typedefs的模板专门化
#include <iostream>
#include <stdint.h>
typedef uint64_t A;
typedef uint64_t B;
template<typename T>
class Handler
{
void DestroyObject(T parent);
};
template<>
inline void Handler<A>::DestroyObject(A object) {
std::cout << "destroy type A" << std::endl;
}
template<>
inline void Handler<B>::DestroyObject(B object) {
std::cout << "destroy type B!" << std::endl;
}
int main()
{}
是有来处理这个问题还是我得去和返工的所有示例代码手工删除对象什么好办法?如果可能的话,我想编译下32位。
对不起,如果这个问题已被问到别的地方,我无法找到它,因为谷歌总是出现部分模板和其他非相关主题。我确实理解编译器正在查看的代码_A和_B的问题,并将其视为uint64_t而不关心它们的命名方式不同,这会导致DestroyObject重载针对导致重定义错误的相同模板类型。
编辑:修复了使用无效命名的代码,因为这实际上并不是核心问题。
@StoryTeller(a)是否有解决这个问题的方法? (b)我在我测试的代码中改变了我意外地粘贴了该代码的旧版本。 – Cieric
类型是否严格整数? – StoryTeller
@StoryTeller是的,有20个。基于它们的工作方式,我认为它们在32位模式下的使用方式类似于64位指针。 – Cieric