2013-10-22 172 views
-1

我在尋找一個數據類型(它將被用作索引),它應該是32位os中的16位和64位操作系統中的32位。我使用VS2010,並且我知道可以使用HALF_PTR,但在用於索引時聽起來不太好,我仍然可以將它定義爲更有意義的名稱,但在此之前,有任何已定義的數據類型可用於這個目的?什麼數據類型是32位操作系統中的16位和64位操作系統中的32位?

+2

C和C++沒有在這方面做出任何承諾,所以你必須要讀你的編譯器的文檔。 –

+1

當他們不解釋爲什麼需要這樣一個奇怪的動物時,這些問題很難理解。如果SO用戶名以「新手」開頭,則會額外增加黑客行爲。使用* short *以32位代碼索引數組不是優化。離得很遠。 –

+0

@Hans Passant,它用於在二進制blob頭文件中寫入一個字段。這個特定的字段應該是32位OS中的16位和64位OS中的32位。它不被用作空間優化的數組索引。 – Coder777

回答

5

您可以使用特徵做出適合您的系統類型別名:

#include <cstdint> 

template <unsigned int> struct HalfPtrImpl; 
template <> struct HalfPtrImpl<4> { typedef uint16_t type; }; 
template <> struct HalfPtrImpl<8> { typedef uint32_t type; }; 

typedef HalfPtrImpl<sizeof(uintptr_t)>::type HalfPtr; 

現在使用HalfPtr爲你的類型。

(您可以通過使用std::conditional幾次方法很多快捷方式上面。皮膚這隻貓。)

+0

32 ** byte **整數?這是一個非常寬的數據通路! –

+0

@BenVoigt:誰在哪裏? :-) –

相關問題