在學習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