cpp / expert
Snippet
C++20 Concepts und Requires-Klauseln
Concepts ermöglichen es, semantische Anforderungen an Template-Argumente zu definieren. Anstelle von kryptischen Fehlermeldungen tief aus einem Template heraus prüft der Compiler die Einschränkung direkt am Aufrufort, was zu wesentlich klareren Fehlermeldungen und einer besseren Code-Dokumentation führt.
snippet.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <concepts>#include <iostream>template <typename T>concept Arithmetic = std::is_arithmetic_v<T>;template <Arithmetic T>T calculate_mean(T a, T b) {return (a + b) / 2;}int main() {std::cout << calculate_mean(10, 20) << "\n";// calculate_mean("string", "error"); // Compile error}
Erklärung
1
concept Arithmetic = std::is_arithmetic_v<T>;
Definiert einen benannten Constraint, der wahr ist, wenn der Typ T ein eingebauter numerischer Typ ist.
2
template <Arithmetic T>
Wendet das Arithmetic-Concept als Einschränkung für den Template-Parameter T an.