Heim  >  Artikel  >  Backend-Entwicklung  >  Sollten Sie „std::enable_if“ in Funktionssignaturen vermeiden?

Sollten Sie „std::enable_if“ in Funktionssignaturen vermeiden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-31 05:57:30928Durchsuche

Should You Avoid `std::enable_if` in Function Signatures?

Prozedurale Beeinträchtigung: Vermeidung von std::enable_if in Funktionssignaturen

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.

Methoden zum Einsatz von std::enable_if in Funktionssignaturen

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>

Empfohlener Ansatz: Platzierung in den Vorlagenparametern

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn