Самый простой способ определить, является ли текущая сборка 32 / 64бит в коде - PullRequest
0 голосов
/ 01 февраля 2019

Мне интересно, что было бы самым простым способом определить, является ли текущая сборка (в частности: программно проверить, если сама программа) 32 или 64-битным кодом.

Текущий пример: я строюПриложение C ++ для Windows / VS, которое построено как x86 и как x64 исполняемый файл и распространяется отдельно.

В программе есть подпрограмма, в которой я должен проверить, какая версия работает в данный момент (программа должна статьтак сказать, осознавая свою цель).

Я начал сходить с ума от множества обращений к Win32 API, но все это очень громоздко и в основном просто отражает то, как ОС выполняет программу.Я уверен, что должен быть более изящный способ, о котором я не знаю?Как бы вы справились с этим?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019
inline bool is_32bit () { return sizeof (void *) <= 4; )

Я не вижу необходимости во всех этих шаблонах - это все равно будет встроено, если вы поместите его в файл заголовка.

0 голосов
/ 01 февраля 2019
template<std::size_t n>
constexpr bool Am_I_bit(){
  return (sizeof(void*)*CHAR_BIT)==n;
}

constexpr bool I_am_32_bit(){
  return Am_I_bit<32>();
}

constexpr bool I_am_64_bit(){
  return Am_I_bit<64>();
}

Сбой на некоторых нелепо скрытых платформах, но вы их не строите.

...