C++17
std::variantuntuk C++11 / 14 / 17
MPark.Variant adalah implementasi C++17 std::variant untuk C++11 / 14 / 17 .
std::variant untuk libc++std::variant libc++ . Cabang single-header menyediakan file variant.hpp mandiri untuk setiap rilis. Salin dan #include !
Anda dapat menambahkan mpark/variant sebagai submodul ke proyek Anda.
git submodule add https://github.com/mpark/variant.git 3rdparty/variant Tambahkan direktori include ke jalur penyertaan Anda dengan -I3rdparty/variant/include lalu #include header variant.hpp dengan #include <mpark/variant.hpp> .
Jika Anda menggunakan CMake, Anda cukup menggunakan 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 Ini akan menginstal mpark/variant ke direktori instalasi default untuk platform Anda ( /usr/local untuk Unix, C:Program Files untuk Windows). Anda juga dapat menginstal di lokasi khusus melalui variabel CMAKE_INSTALL_PREFIX , (misalnya, cmake .. -DCMAKE_INSTALL_PREFIX=/opt ).
mpark/variant yang terinstal kemudian dapat ditemukan oleh CMake melalui 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 akan mencari mpark/variant dalam kumpulan awalan instalasi defaultnya. Jika mpark/variant dipasang di lokasi khusus melalui variabel CMAKE_INSTALL_PREFIX , Anda mungkin perlu menggunakan CMAKE_PREFIX_PATH untuk menentukan lokasi (misalnya, cmake .. -DCMAKE_PREFIX_PATH=/opt ).
Pustaka ini memerlukan kompiler C++11 yang sesuai standar. Kompiler berikut terus diuji:
| Penyusun | Sistem Operasi | Rangkaian Versi |
|---|---|---|
| GCC 4.8.5 | Ubuntu 16.04.6 LTS | g++-4.8 (Ubuntu 4.8.5-4ubuntu8~16.04.1) 4.8.5 |
| GCC 4.9.4 | Ubuntu 16.04.6 LTS | g++-4.9 (Ubuntu 4.9.4-2ubuntu1~16.04) 4.9.4 |
| GCC 5.5.0 | Ubuntu 16.04.6 LTS | g++-5 (Ubuntu 5.5.0-12ubuntu1~16.04) 5.5.0 20171010 |
| GCC 6.5.0 | Ubuntu 16.04.6 LTS | g++-6 (Ubuntu 6.5.0-2ubuntu1~16.04) 6.5.0 20181026 |
| GCC 7.4.0 | Ubuntu 16.04.6 LTS | g++-7 (Ubuntu 7.4.0-1ubuntu1 |
| GCC 8.3.0 | Ubuntu 16.04.6 LTS | g++-8 (Ubuntu 8.3.0-16ubuntu3~16.04) 8.3.0 |
| GCC 9.2.1 | Ubuntu 16.04.6 LTS | g++-9 (Ubuntu 9.2.1-17ubuntu1~16.04) 9.2.1 20191102 |
| Dentang 3.6.2 | Ubuntu 16.04.6 LTS | Ubuntu dentang versi 3.6.2-3ubuntu2 (tags/RELEASE_362/final) (berdasarkan LLVM 3.6.2) |
| Dentang 3.7.1 | Ubuntu 16.04.6 LTS | Ubuntu dentang versi 3.7.1-2ubuntu2 (tags/RELEASE_371/final) (berdasarkan LLVM 3.7.1) |
| Dentang 3.8.0 | Ubuntu 16.04.6 LTS | dentang versi 3.8.0-2ubuntu4 (tag/RELEASE_380/final) |
| Dentang 3.9.1 | Ubuntu 16.04.6 LTS | dentang versi 3.9.1-4ubuntu3~16.04.2 (tag/RELEASE_391/rc2) |
| Dentang 4.0.0 | Ubuntu 16.04.6 LTS | dentang versi 4.0.0-1ubuntu1~16.04.2 (tag/RELEASE_400/rc1) |
| Dentang 5.0.0 | Ubuntu 16.04.6 LTS | dentang versi 5.0.0-3~16.04.1 (tag/RELEASE_500/final) |
| Dentang 6.0.0 | Ubuntu 16.04.6 LTS | dentang versi 6.0.0-1ubuntu2~16.04.1 (tag/RELEASE_600/final) |
| Dentang 7.1.0 | Ubuntu 16.04.6 LTS | dentang versi 7.1.0-svn353565-1 |
| Dentang 8.0.1 | Ubuntu 16.04.6 LTS | dentang versi 8.0.1-svn369350-1 |
| Dentang Xcode 8.3 | Kernel Darwin Versi 16.7.0 (OS X 10.12.6) | Apple LLVM versi 8.1.0 (dentang-802.0.42) |
| Dentang Xcode 9.4 | Kernel Darwin Versi 17.4.0 (OS X 10.13.3) | Apple LLVM versi 9.1.0 (dentang-902.0.39.2) |
| Dentang Xcode 10.1 | Kernel Darwin Versi 17.7.0 (OS X 10.13.6) | Apple LLVM versi 10.0.0 (dentang-1000.11.45.5) |
| Visual Studio 14 2015 | Visual Studio 2015 dengan Pembaruan 3 | MSVC 19.0.24241.7 |
| Visual Studio 15 2017 | Visual Studio 2017 dengan Pembaruan 8 | MSVC 19.15.26732.1 |
| Visual Studio 15 2017 | Visual Studio 2017 dengan Pembaruan 9 | MSVC 19.16.27025.1 |
| Visual Studio 15 2017 ( Dentang/LLVM ) | Visual Studio 2017 | Dentang 7.0.0 |
constexpr tidak tersedia untuk operator visit dan relasional.std::variant memerlukan dukungan -std=c++17 . MPARK_VARIANT_INCLUDE_TESTS : STRING ( bawaan : "" )
Daftar pengujian yang dipisahkan titik koma untuk dibuat. Nilai yang mungkin adalah mpark , dan libc++ .
CATATAN : Pengujian libc++ std::variant dibuat dengan -std=c++17 .
Lihat tes/README.md.
Didistribusikan di bawah Lisensi Perangkat Lunak Boost, Versi 1.0.