Warum muss das Member Detector Fallback int sein?

8

Ich dachte, ich hätte die Idee von dieser Klasse (von hier Ссылка ):

%Vor%

aber ich habe versucht, es an meinen Fall anzupassen, in dem ich nach einem Mitglied double MyTest gesucht habe. Also habe ich diese Zeile geändert:

%Vor%

bis

%Vor%

aber der Detektor gab "wahr" für alle Klassen zurück, unabhängig davon, ob sie ein MyTest-Mitglied hatten oder nicht. Ich änderte die Zeile zu:

%Vor%

und dann hat es wie erwartet funktioniert.

Kann jemand erklären, warum das Fallback ein int sein muss und nicht der Typ des Mitglieds, nach dem Sie eigentlich suchen?

Hier ist ein Beispiel, in dem ich nach X als Int suche, aber nach Y als Doppel:

%Vor%

Meine Ausgabe ist:

1 0

1 1

    
David Doria 14.12.2015, 16:40
quelle

1 Antwort

4

Es muss nicht int sein. Es kann von jedem Typ sein. Sie müssen nur an jedem Ort nach Typ und Namen referenzieren:

%Vor%

und hier:

%Vor%

Die Idee ist, dass wenn T keine X hat, Fallback::X gefunden wird, was &U::X nach Typ entspricht (da es nur eine gibt - die in Fallback ). Aber wenn T eine X hat, ist die Suche mehrdeutig. Es ist also egal, welchen Typ Fallback::X hat - int ist nur der kürzeste.

Beachten Sie, dass dies in C ++ 11 mit etwas wie Yakks can_apply viel einfacher ist:

%Vor%

Siehe auch diese Frage für ein halbes Dutzend anderer Wege, die alle besser sind als der alte Stil-Elementdetektor.

    
Barry 14.12.2015, 16:47
quelle

Tags und Links