capypad
0 Tage Serie
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
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.