Какой тип данных составляет 16 бит в 32-битной ОС и 32 бита в 64-битной ОС?

Я ищу тип данных (который будет использоваться в качестве индекса), он должен быть 16 бит в 32-битной ОС и 32-бит в 64-битной ОС. Я использую VS2010, и я знаю, что HALF_PTR может быть использован, но он не очень хорошо звучит, когда используется для индекса, и я все еще могу набрать его для более значимого имени, но до этого есть какой-либо определенный тип данных, который я могу использовать для это цель?

1 ответ

Решение

Вы можете использовать черты для создания псевдонима типа, который подходит вашей системе:

#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 Пару раз. Много способов снять шкуру с этой кошки.)

Другие вопросы по тегам