cpp / intermediate
Snippet
Typsichere Summentypen für polymorphe Werte
std::variant ist eine typsichere Union, die einen von mehreren spezifizierten Typen halten kann. Im Gegensatz zu traditionellen C-Unions weiß sie, welchen Typ sie gerade hält, und garantiert Typsicherheit durch Exceptions oder sichere Zugriffspointer.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <variant>#include <string>#include <iostream>void process_input() {std::variant<int, std::string> value;value = 10;if (std::holds_alternative<int>(value)) {std::cout << "Int: " << std::get<int>(value) << "\n";}value = "Modern C++";// Using get_if to avoid exceptionsif (auto* s = std::get_if<std::string>(&value)) {std::cout << "String: " << *s << "\n";}}
Erklärung
1
std::variant<int, std::string> value;
Deklariert eine Variable, die entweder ein int oder ein string sein kann.
2
std::get_if<std::string>(&value)
Gibt einen Pointer auf den String zurück, falls dieser aktiv ist, sonst nullptr.