Ist es möglich, std :: enable_if zu verwenden, um eine Mitgliedervorlagenspezialisierung auszuwählen?

8

Gegeben eine Klassendeklaration

%Vor%

Ich möchte A::foo für verschiedene Typen ( int , ...) und Klassen (POD, non-POD) von T spezialisieren. Leider kann ich std::enable_if nicht für letzteres verwenden. Folgendes kompiliert nicht:

%Vor%

Das Problem liegt wahrscheinlich daran, dass das std::enable_if<...> -Stück Teil der Funktionssignatur ist und dass ich kein solches Mitglied in A deklariert habe. Wie kann ich ein Template-Mitglied basierend auf Typeigenschaften spezialisieren?

    
Daniel Gehriger 26.10.2012, 10:02
quelle

2 Antworten

4

Ich sehe keinen Grund, mich hier zu spezialisieren, die Überlastung der Funktion scheint in meinem Kopf zu genügen.

%Vor%

Wenn Sie nach POD oder keinem POD suchen, haben Sie nur diese zwei Möglichkeiten, so dass eine generische Funktion nicht benötigt wird (und nicht erlaubt ist, weil sie mehrdeutig wäre). Du brauchst mehr als das? Mit Hilfe von std::enable_if<std::is_same<int, T>::value, T>::type können Sie nach expliziten Typen ohne Spezialisierung suchen.

    
nijansen 26.10.2012, 10:48
quelle
4

Ich würde das einfach an eine Struktur weiterleiten, die das gut beherrscht:

%Vor%     
kennytm 26.10.2012 10:33
quelle