C++17
std::variant
для C++11 / 14 / 17
MPark.Variant — это реализация C++17 std::variant
для C++11 / 14 / 17 .
std::variant
для libc++.std::variant
библиотеки libc++ . Ветка с одним заголовком предоставляет отдельный файл variant.hpp
для каждого выпуска. Скопируйте его и #include
прочь!
Вы можете добавить mpark/variant
в качестве подмодуля в свой проект.
git submodule add https://github.com/mpark/variant.git 3rdparty/variant
Добавьте каталог include
в свой путь включения с помощью -I3rdparty/variant/include
, затем #include
заголовок variant.hpp
с помощью #include <mpark/variant.hpp>
.
Если вы используете CMake, вы можете просто использовать add_subdirectory(3rdparty/variant)
:
cmake_minimum_required ( VERSION 3.6.3)
project (HelloWorld CXX)
add_subdirectory (3rdparty/variant)
add_executable (hello-world hello_world.cpp)
target_link_libraries (hello-world mpark_variant)
find_package
git clone https://github.com/mpark/variant.git
mkdir variant/build && cd variant/build
cmake ..
cmake --build . --target install
При этом mpark/variant
будет установлен в каталог установки по умолчанию для вашей платформы ( /usr/local
для Unix, C:Program Files
для Windows). Вы также можете установить в произвольное расположение с помощью переменной CMAKE_INSTALL_PREFIX
(например, cmake .. -DCMAKE_INSTALL_PREFIX=/opt
).
Установленный mpark/variant
затем может быть найден CMake через find_package
:
cmake_minimum_required ( VERSION 3.6.3)
project (HelloWorld CXX)
find_package (mpark_variant 1.3.0 REQUIRED)
add_executable (hello-world hello_world.cpp)
target_link_libraries (hello-world mpark_variant)
CMake будет искать mpark/variant
в наборе установочных префиксов по умолчанию. Если mpark/variant
установлен в произвольное расположение с помощью переменной CMAKE_INSTALL_PREFIX
, вам, вероятно, потребуется использовать CMAKE_PREFIX_PATH
для указания местоположения (например, cmake .. -DCMAKE_PREFIX_PATH=/opt
).
Для этой библиотеки требуется компилятор C++11, соответствующий стандарту. Следующие компиляторы постоянно тестируются:
Компилятор | Операционная система | Строка версии |
---|---|---|
GCC 4.8.5 | Убунту 16.04.6 ЛТС | g++-4.8 (Ubuntu 4.8.5-4ubuntu8~16.04.1) 4.8.5 |
GCC 4.9.4 | Убунту 16.04.6 ЛТС | g++-4.9 (Ubuntu 4.9.4-2ubuntu1~16.04) 4.9.4 |
GCC 5.5.0 | Убунту 16.04.6 ЛТС | g++-5 (Ubuntu 5.5.0-12ubuntu1~16.04) 5.5.0 20171010 |
GCC 6.5.0 | Убунту 16.04.6 ЛТС | g++-6 (Ubuntu 6.5.0-2ubuntu1~16.04) 6.5.0 20181026 |
GCC 7.4.0 | Убунту 16.04.6 ЛТС | г++-7 (Ubuntu 7.4.0-1ubuntu1 |
GCC 8.3.0 | Убунту 16.04.6 ЛТС | g++-8 (Ubuntu 8.3.0-16ubuntu3~16.04) 8.3.0 |
ОУЗ 9.2.1 | Убунту 16.04.6 ЛТС | g++-9 (Ubuntu 9.2.1-17ubuntu1~16.04) 9.2.1 20191102 |
Кланг 3.6.2 | Убунту 16.04.6 ЛТС | Ubuntu clang версии 3.6.2-3ubuntu2 (теги/RELEASE_362/final) (на основе LLVM 3.6.2) |
Кланг 3.7.1 | Убунту 16.04.6 ЛТС | Ubuntu clang версии 3.7.1-2ubuntu2 (теги/RELEASE_371/final) (на основе LLVM 3.7.1) |
Кланг 3.8.0 | Убунту 16.04.6 ЛТС | версия clang 3.8.0-2ubuntu4 (теги/RELEASE_380/final) |
Кланг 3.9.1 | Убунту 16.04.6 ЛТС | версия clang 3.9.1-4ubuntu3~16.04.2 (теги/RELEASE_391/rc2) |
Кланг 4.0.0 | Убунту 16.04.6 ЛТС | версия clang 4.0.0-1ubuntu1~16.04.2 (теги/RELEASE_400/rc1) |
Кланг 5.0.0 | Убунту 16.04.6 ЛТС | версия clang 5.0.0-3~16.04.1 (теги/RELEASE_500/final) |
Кланг 6.0.0 | Убунту 16.04.6 ЛТС | версия clang 6.0.0-1ubuntu2~16.04.1 (теги/RELEASE_600/final) |
Кланг 7.1.0 | Убунту 16.04.6 ЛТС | версия clang 7.1.0-svn353565-1 |
Кланг 8.0.1 | Убунту 16.04.6 ЛТС | версия clang 8.0.1-svn369350-1 |
Кланг Xcode 8.3 | Ядро Дарвина версии 16.7.0 (OS X 10.12.6) | Apple LLVM версии 8.1.0 (clang-802.0.42) |
Кланг Xcode 9.4 | Ядро Дарвина версии 17.4.0 (OS X 10.13.3) | Apple LLVM версии 9.1.0 (clang-902.0.39.2) |
Кланг Xcode 10.1 | Ядро Дарвина версии 17.7.0 (OS X 10.13.6) | Apple LLVM версии 10.0.0 (clang-1000.11.45.5) |
Визуальная Студия 14 2015 г. | Visual Studio 2015 с обновлением 3 | МСВК 19.0.24241.7 |
Визуальная Студия 15 2017 г. | Visual Studio 2017 с обновлением 8 | МСВК 19.15.26732.1 |
Визуальная Студия 15 2017 г. | Visual Studio 2017 с обновлением 9 | МСВК 19.16.27025.1 |
Visual Studio 15 2017 ( Clang/LLVM ) | Визуальная Студия 2017 | Кланг 7.0.0 |
constexpr
недоступна для операторов visit
и реляционных операторов.std::variant
требуется поддержка -std=c++17
. MPARK_VARIANT_INCLUDE_TESTS
: STRING
( по умолчанию : ""
)
Список тестов, разделенных точкой с запятой. Возможные значения: mpark
и libc++
.
ПРИМЕЧАНИЕ . Тесты libc++ std::variant
создаются с помощью -std=c++17
.
Обратитесь к test/README.md.
Распространяется по лицензии Boost Software License, версия 1.0.