0 Tage Serie
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 exceptions
if (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.