Praktische C ++ Metaprogrammierung

8

Ich habe gerade das Buch "Practical C ++ Metaprogramming" gelesen und es gibt folgendes Beispiel, das ich nicht kompilieren kann. Kannst du mir helfen, das herauszufinden?

%Vor%

Ich bekomme einen Kompilierungsfehler, der besagt: 'type' ist kein Mitglied einer direkten oder indirekten Basisklasse von 'make_tuple_of_params'. Es scheint so, als ob die SFINAE nicht wie erwartet funktioniert, da die Standardstruktur ausgewählt ist. Wie behebe ich das?

    
0xBADF00 29.11.2016, 14:21
quelle

2 Antworten

5

Für Lambdas, die keine Lambdas mit automatischen Parametern enthalten, könnte die Umgehungslösung wie folgt aussehen:

%Vor%

[Live-Demo]

    
W.F. 29.11.2016, 14:52
quelle
6

Der Typ von [] (int, double, float) {} ist ein unbenannter Klassentyp, der für main lokal ist, der Verschlusstyp genannt wird. Es ist definitiv nicht void (int, double, float) ; es ist überhaupt kein Funktionstyp. Daher gilt die Spezialisierung für Funktionstypen nicht, und die primäre Vorlage ist ausgewählt. (Beachten Sie, dass in Ihrem Code keine SFINAE enthalten ist).

Wie Sie das beheben können: Ich glaube nicht, dass es eine vollständig allgemeine Lösung gibt. Es könnte eine Lösung / Abhilfe für eine bestimmte some_magic_function geben, aber das hängt davon ab, was Sie für diese Funktion tun müssen.

    
Angew 29.11.2016 14:24
quelle