namespace cpp

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


kennen:concepts

Concepts

God is a concept by which we measure our pain.
— John Lennon

Bislang waren Schablonen zu allgemein und führten bei falscher Nutzung zu langen, schwer verständlichen Fehlermeldungen.

struct X {}; 
X a, b;
X smallest = std::min(a,b); 

setzt voraus, dass der Typ von a und b den Operator < beherrscht, dessen Ergebnis in einen booleschen Wert überführbar ist. Concepts1), für den Compiler verarbeitbare Anforderungen

template<typename T>
concept LessThanComparable = requires(T t) 
{ 
    { t<t } -> bool; 
};

template <LessThanComparable T>
const T& min(const T& x, const T& y)
{
    return y < x ? y : x;
}

vereinfachen die Schreibweise komplexerer Schablonen, beschleunigen den Übersetzungsvorgang und melden klarer, welche Einschränkung wo nicht beachtet wurde. Der Aufruf min(a,b) erfüllte die Anforderung LessThanComparable(X) nicht.

1)
Nach Fehlschlag in C++0x werden "Concepts Lite" (seit g++ 6 erprobt, Option -fconcepts) nun leicht abgewandelt Bestandteil von C++20 (https://en.cppreference.com/w/cpp/language/constraints).
kennen/concepts.txt · Zuletzt geändert: 2018-12-22 13:30 von rrichter