Was ist der Unterschied zwischen der Verwendung von „enable_if“ in der Vorlagenspezifikation und im Rückgabetyp?C++

Programme in C++. Entwicklerforum
Guest
 Was ist der Unterschied zwischen der Verwendung von „enable_if“ in der Vorlagenspezifikation und im Rückgabetyp?

Post by Guest »

Ich versuche, eine Funktionsvorlage zu schreiben, make, die verschiedene Objekte basierend auf dem angegebenen Vorlagenparameter erstellt. Der Aufruf dieser Funktion könnte etwa so aussehen: make(1, 8);. Dazu verwende ich SFINAE, aber mir ist nicht klar, ob es besser ist, enable_if_t zu verwenden, um den Rückgabetyp anzugeben, oder ihn als Standardwert in der Vorlagenspezifikation zu verwenden.
Aus meiner Sicht könnten mögliche Deklarationen dieser Funktion so aussehen:
Option 1 – Geben Sie den Rückgabetyp an

Code: Select all

template
std::enable_if_t make(int8_t first, int8_t second);
Option 2 – Standardwert in der Vorlagenspezifikation

Code: Select all

template
return_type make(int8_t first, int8_t second);
Für jede dieser Optionen gäbe es mehrere unterschiedliche Funktionsvorlagen desselben Stils für unterschiedliche Rückgabetypen wie std::unordered_set und std::vector.
Meine Fragen
Ist eine dieser Optionen besser oder robuster als die andere? Mir kommt es so vor, als würden beide nach erfolgreicher Substitution das Gleiche auflösen, aber vielleicht gehen sie auf unterschiedliche Weise mit Substitutionsfehlern um?
Ich weiß, dass ich mit solchen Funktionsvorlagen vorsichtig sein muss unterscheiden sich nur in den Standardwerten der Vorlagenparameter; Spielt das hier eine Rolle, da der Standardwert in Option 2 von einem Vorlagenparameter ohne Standardwert abhängt?
Hinweise
Ich verwende C+ +17 und dies kann nicht geändert werden, aber Antworten zu anderen Standards sind immer noch sehr willkommen! Außerdem handelt es sich bei den in meinem eigentlichen Projekt verwendeten Typen um benutzerdefinierte Typen und nicht um Standardcontainer, daher geht es bei dieser Frage nicht wirklich um unterschiedliche Möglichkeiten zum Erstellen von Containern.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post