C++17
std::variantC++11 / 14 / 17的變體
MPark.Variant是C++11 / 14 / 17的C++17 std::variant的實作。
std::variant的實現std::variant測試套件進行持續測試。 單頭分支為每個版本提供獨立的variant.hpp檔案。複製它並#include消失!
您可以將mpark/variant作為子模組新增到您的專案中。
git submodule add https://github.com/mpark/variant.git 3rdparty/variant使用-I3rdparty/variant/include將include路徑,然後使用#include <mpark/variant.hpp> #include 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安裝到您平台的預設安裝目錄(對於 Unix,為/usr/local ;對於 Windows,為C:Program Files )。您也可以透過CMAKE_INSTALL_PREFIX變數安裝在自訂位置(例如, cmake .. -DCMAKE_INSTALL_PREFIX=/opt )。
然後 CMake 可以透過find_package找到已安裝的mpark/variant :
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編譯器。以下編譯器經過持續測試:
| 編譯器 | 作業系統 | 版本字串 |
|---|---|---|
| 海灣合作委員會 4.8.5 | Ubuntu 16.04.6 LTS | g++-4.8 (Ubuntu 4.8.5-4ubuntu8~16.04.1) 4.8.5 |
| 海灣合作委員會 4.9.4 | Ubuntu 16.04.6 LTS | g++-4.9 (Ubuntu 4.9.4-2ubuntu1~16.04) 4.9.4 |
| 海灣合作委員會5.5.0 | Ubuntu 16.04.6 LTS | g++-5 (Ubuntu 5.5.0-12ubuntu1~16.04) 5.5.0 20171010 |
| 海灣合作委員會6.5.0 | Ubuntu 16.04.6 LTS | g++-6 (Ubuntu 6.5.0-2ubuntu1~16.04) 6.5.0 20181026 |
| 海灣合作委員會7.4.0 | Ubuntu 16.04.6 LTS | g++-7(Ubuntu 7.4.0-1ubuntu1 |
| 海灣合作委員會8.3.0 | Ubuntu 16.04.6 LTS | g++-8 (Ubuntu 8.3.0-16ubuntu3~16.04) 8.3.0 |
| 海灣合作委員會9.2.1 | Ubuntu 16.04.6 LTS | g++-9 (Ubuntu 9.2.1-17ubuntu1~16.04) 9.2.1 20191102 |
| 鏗鏘3.6.2 | Ubuntu 16.04.6 LTS | Ubuntu clang 版本 3.6.2-3ubuntu2 (tags/RELEASE_362/final)(基於 LLVM 3.6.2) |
| 鏗鏘3.7.1 | Ubuntu 16.04.6 LTS | Ubuntu clang 版本 3.7.1-2ubuntu2 (tags/RELEASE_371/final) (基於 LLVM 3.7.1) |
| 鏗鏘3.8.0 | Ubuntu 16.04.6 LTS | clang 版本 3.8.0-2ubuntu4 (tags/RELEASE_380/final) |
| 鏗鏘3.9.1 | Ubuntu 16.04.6 LTS | clang版本3.9.1-4ubuntu3~16.04.2(標籤/RELEASE_391/rc2) |
| 鏗鏘4.0.0 | Ubuntu 16.04.6 LTS | clang版本4.0.0-1ubuntu1~16.04.2(標籤/RELEASE_400/rc1) |
| 鏗鏘5.0.0 | Ubuntu 16.04.6 LTS | clang 版本 5.0.0-3~16.04.1 (tags/RELEASE_500/final) |
| 鏗鏘6.0.0 | Ubuntu 16.04.6 LTS | clang 版本 6.0.0-1ubuntu2~16.04.1 (tags/RELEASE_600/final) |
| 鏗鏘7.1.0 | Ubuntu 16.04.6 LTS | 鏗鏘版本7.1.0-svn353565-1 |
| 鏗鏘8.0.1 | Ubuntu 16.04.6 LTS | 鏗鏘版本8.0.1-svn369350-1 |
| 鏗鏘Xcode 8.3 | Darwin 核心版本 16.7.0 (OS X 10.12.6) | Apple LLVM 版本 8.1.0 (clang-802.0.42) |
| 鏗鏘Xcode 9.4 | Darwin 核心版本 17.4.0 (OS X 10.13.3) | Apple LLVM 版本 9.1.0 (clang-902.0.39.2) |
| 鏗鏘Xcode 10.1 | Darwin 核心版本 17.7.0 (OS X 10.13.6) | Apple LLVM 版本 10.0.0 (clang-1000.11.45.5) |
| 視覺工作室 14 2015 | Visual Studio 2015 更新 3 | MSVC 19.0.24241.7 |
| 視覺工作室 15 2017 | Visual Studio 2017 更新 8 | MSVC 19.15.26732.1 |
| 視覺工作室 15 2017 | Visual Studio 2017 更新 9 | MSVC 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建構的。
請參閱測試/README.md。
根據 Boost 軟體授權版本 1.0 分發。