cpp / intermediate
Snippet
Typsichere Summentypen mit Variant
std::variant ist eine typsichere Union, die in C++17 eingeführt wurde. Im Gegensatz zu herkömmlichen C-Unions weiß sie, welchen Typ sie gerade enthält, und arbeitet mit std::visit zusammen, um Typsicherheit beim Zugriff zur Kompilierzeit zu gewährleisten.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>#include <variant>#include <string>int main() {std::variant<int, std::string> data;data = "Gemini";std::visit([](auto&& arg) {using T = std::decay_t<decltype(arg)>;if constexpr (std::is_same_v<T, int>)std::cout << "Integer: " << arg << std::endl;else if constexpr (std::is_same_v<T, std::string>)std::cout << "String: " << arg << std::endl;}, data);return 0;}
Erklärung
1
std::variant<int, std::string> data;
Definiert eine Variable, die sicher entweder eine Ganzzahl oder einen String enthalten kann.
2
std::visit([](auto&& arg) { ... }, data);
Wendet eine Lambda-Funktion typsicher auf das aktive Element der Variant an.