Scott Meyers‘ kommendes Buch EC 11 empfiehlt, std::enable_if in Funktionssignaturen zu vermeiden. Trotz seiner Vielseitigkeit beim bedingten Entfernen von Funktionen oder Klassen aus der Überladungsauflösung rechtfertigen bestimmte Einschränkungen und Lesbarkeitsprobleme eine erneute Überlegung seiner Verwendung.
Funktion Parameter:
<code class="cpp">template<typename T> struct Check1 { template<typename U = T> U read(typename std::enable_if< // Option 1: As function parameter std::is_same<U, int>::value >::type* = 0) { return 42; } };</code>
Vorlagenparameter:
<code class="cpp">template<typename T> struct Check2 { template<typename U = T, typename std::enable_if< // Option 2: As template parameter std::is_same<U, int>::value, int >::type = 0> U read() { return 42; } };</code>
Rückgabetyp:
<code class="cpp">template<typename T> struct Check3 { template<typename U = T> typename std::enable_if<std::is_same<U, int>::value, U>::type read() { // Option 3: As return type return 42; } };</code>
Die optimale Lösung besteht darin, „enable_if“ in den Vorlagenparametern zu platzieren. Dieser Ansatz bietet mehrere Vorteile:
Verbesserung der Lesbarkeit:
Die Verwendung von „enable_if“ ist von Rückgabe-/Argumenttypen getrennt, was die Klarheit verbessert und Unordnung reduziert.
Universelle Anwendbarkeit:
Im Gegensatz zu den anderen Optionen ist die Platzierung des Vorlagenparameters auf Konstruktoren und Operatoren ohne zusätzliche Argumente anwendbar.
Ausschluss des Rückgabetyps:
Während „Vermeiden „std::enable_if in Funktionssignaturen“ befasst sich in erster Linie mit der Verwendung in normalen Funktionssignaturen, gilt jedoch für Rückgabetypen in Vorlagenspezialisierungen. Das Problem ergibt sich aus Lesbarkeitsproblemen beim Zusammenführen von „enable_if“ mit Rückgabetypen.
Member- und Nicht-Member-Funktionen:
Das Prinzip gilt sowohl für Member- als auch für Nicht-Member-Funktionsvorlagen.
Das obige ist der detaillierte Inhalt vonSollten Sie „std::enable_if' in Funktionssignaturen vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!