Visual C ++ 12 (VS2013-Vorschau) variadic Vorlage mit der Funktion Parameterumgehung

8

Ich habe gerade diesen Fehler bei Microsoft Connect in Bezug auf die Unfähigkeit, das folgende Code-Spielzeug zu kompilieren:

%Vor%

Der Fehler ist:

%Vor%

Im Wesentlichen kann ich einen variadischen Typ innerhalb einer Funktionssignatur nicht entpacken, wenn er als Vorlageparameter verwendet wird. Dieser Code ist (glaube ich) legal; zumindest unterstützen GCC 4.7, Clang 3.0 und ICC 13 alles.

Ich habe diese SO-Frage gesehen, aber es sind keine Problemumgehungen erforderlich oder gegeben, wonach ich suche.

Obwohl es nicht superkritisch ist (offensichtlich komme ich seit vielen Jahren ohne variadische Vorlagen aus), ist dieses Muster von besonderer Bedeutung für einige der Arbeiten, die ich gerne machen würde und einige Artikel, die ich gerne machen würde C ++ 11 Reflektionstechniken für Serialisierung, Skriptbindung usw., was ich gerne für Visual Studio-Benutzer (da es mit Abstand das dominierende Compiler-Toolset in meiner Branche ist) verwenden möchte. Ich würde gerne hoffen, dass die Microsoft-Ingenieure bis 2013 RTM reparieren können, aber ich halte nicht den Atem an.

Ein Spielzeug (diesmal aus dem Gedächtnis) ist ein Beispiel dafür, wie es benutzt wird (minus den Makros, die es etwas einfacher machen):

%Vor%

Natürlich kann das alles ohne variadische Vorlagen gemacht werden. Es erfordert natürlich große Mengen an Code und akzeptiert Beschränkungen für die maximale Funktionalität von gebundenen Elementfunktionen. Und ja, die Übergabe der Funktionen als Template-Parameter ist aufgrund der Art, wie Memberfunktionszeiger in Visual Studio funktionieren (variable Größe) und des Wunsches, Effizienz auf Augenhöhe mit Unglaublich schnelle C ++ Delegierte (in meiner Nische der C ++ - Community kann diese Optimierungsebene manchmal wirklich von Bedeutung sein), die die Option negiert Verwenden von std::function oder ähnlichen Designs.

Gibt es einen Workaround für diesen VS-Fehler? Oder eine andere Möglichkeit, variadische Vorlagen zu verwenden, um einen (Kompilierzeit-) Funktionszeiger in VC ++ 12 zu verwenden?

    
Sean Middleditch 01.07.2013, 08:14
quelle

1 Antwort

6

Nicht sicher warum, aber die Vereinfachung mit einem typedef scheint zu funktionieren:

%Vor%

Zumindest in der Visual Studio 2013 Ultimate Preview.

    
Jens Åkerblom 01.07.2013, 08:48
quelle

Tags und Links