Как создать динамический список флажков для выбора пользователем

Из Bjarne Stroustrup C ++ 0x FAQ :

__cplusplus

В C ++ 0x макрос __cplusplus будет установлено значение, которое отличается от (больше) текущего 199711L.

blockquote>

Хотя это не так полезно, как хотелось бы. gcc (видимо, в течение почти 10 лет) это значение было установлено на 1, исключая один главный компилятор, до тех пор, пока он не был зафиксирован, когда gcc 4.7.0 вышел .

Это стандарты C ++ и какое значение вы должны ожидать в __cplusplus:

  • C ++ pre-C ++ 98: __cplusplus is 1.
  • C ++ 98: __cplusplus is 199711L.
  • C ++ 98 + TR1: Это читается как C ++ 98, и нет способа проверить, что я знаю.
  • C ++ 11: __cplusplus is 201103L.
  • C ++ 14: __cplusplus is 201402L.
  • C ++ 17 : __cplusplus is 201703L.

Если компилятор может быть старше gcc, нам нужно обратиться к специфическому хакерству компилятора (посмотрите на макрос версии, сравните его с таблица с реализованными функциями) или используйте Boost.Config (который предоставляет соответствующие макросы ). Преимущество этого в том, что мы действительно можем выбрать конкретные функции нового стандарта и написать обходное решение, если эта функция отсутствует. Это часто предпочтительнее для оптового решения, так как некоторые компиляторы будут требовать реализовать C ++ 11, но предлагают только набор функций.

В Stdcxx Wiki размещена всеобъемлющая матрица для поддержки компилятора из функций C ++ 0x (если вы решились проверить сами функции).

К сожалению, более мелкозернистая проверка функций (например, отдельные функции библиотеки, такие как std::copy_if) может выполняться в системе сборки вашего приложения (запустить код с помощью функции, проверить, скомпилирован ли он и получить правильные результаты - autoconf является инструментом выбора при прохождении этого маршрута).

0
задан Desmond Sim 19 March 2019 в 08:03
поделиться