Verwendung von SFINAE zur Erkennung einer Memberfunktion [duplizieren]

8

Um herauszufinden, ob eine Klasse eine Memberfunktion size hat, können Sie in C ++ 11 den folgenden Testhelfer definieren:

%Vor%

Gibt es einen ähnlichen Trick in C ++ 98, ohne auf Compiler-Erweiterungen wie typeof zu setzen?

    
nijansen 02.09.2013, 09:52
quelle

2 Antworten

8

Tatsächlich ist Ihre Erkennung möglicherweise fehlerhaft.

Das Problem ist, dass Sie nur feststellen, dass C ein Mitglied size :

hat
  • es könnte ein Attribut sein
  • es könnte eine Methode sein mit welcher Unterschrift auch immer
  • es könnte sogar mehrere Methoden (mit verschiedenen Unterschriften) geben

Wenn Sie die Erkennung härten möchten, sollten Sie versuchen, nur das Recht size (für welches Recht auch immer) zu erkennen. Hier ist eine solche verhärtete Erkennung .

%Vor%

Bearbeiten: mit Überladungen .

Der Trick, mit falschen size -Mitgliedern umzugehen, ist die really_has -Struktur. Ich mache keinen Vorwand, dass es perfekt ist, obwohl ...

In C ++ 11 sind Dinge einfacher (obwohl nicht weniger ausführlich), weil Sie Dinge erkennen können, indem Sie verwenden direkt. Das äquivalente Merkmal ist somit:

%Vor%

Die empfohlene Methode in C ++ ist jedoch, Eigenschaften nicht zu verwenden , wenn Sie können; In Funktionen können Sie zum Beispiel decltype rechts in der Typ-Signatur verwenden.

    
Matthieu M. 02.09.2013, 13:32
quelle
1

Ja:

%Vor%     
Marcin Łoś 02.09.2013 09:56
quelle

Tags und Links