Microsoft (hauptsächlich Herb Sutter ) empfiehlt bei Verwendung von WinRT mit C ++ / CX, WinRT an den Grenzen der Anwendung zu belassen und den Kern der Anwendung in Standard-ISO-C ++ zu belassen.
Ich habe eine Anwendung geschrieben, die ich portabel lassen möchte, daher wurde meine Kernfunktionalität in Standard-C ++ geschrieben, und ich versuche jetzt, ein Metro-ähnliches Front-End dafür mit C ++ / CX zu schreiben. Ich hatte jedoch ein kleines Problem mit diesem Ansatz. Wenn ich zum Beispiel einen Vektor mit benutzerdefinierten C ++ - Typen in ein XAML-ListView-Steuerelement verschieben möchte, muss ich meinen benutzerdefinierten Typ in einen WinRT-Referenz- / Werttyp einschließen, damit er in einem gespeichert wird Vector^
. Bei diesem Ansatz muss ich zwangsläufig einen großen Teil meiner C ++ - Klassen mit WinRT-Klassen umbrechen.
Dies ist das erste Mal, dass ich versucht habe, eine portable native Anwendung in C ++ zu schreiben. Ist es wirklich praktisch, WinRT an diesen Grenzen zu halten? Wie sonst könnte ein solcher tragbarer Kern mit einer plattformspezifischen Grenze gehandhabt werden?
quelle
Antworten:
IMHO (alter Programmierer; arbeite bei Microsoft, aber dies ist eine persönliche Meinung): Bevor ich diese Frage beantworten kann, musst du diese andere Frage beantworten:
Wohin bewegt sich der Code? Wenn Sie an einer einzelnen Plattform (in diesem Fall WinRT) festhalten, müssen Sie sich in der Nähe der Plattform befinden - und das bedeutet, dass Sie die vorhandenen Abstraktionen verwenden. In Ihrem Beispiel würde Ihr Code dann Vector ^ verwenden, um die WinRT-Anforderungen zu erfüllen.
OTOH, wenn Sie woanders hinziehen (VMS rockt!), Dann ist standardbasiert sinnvoll.
Angesichts der Tatsache, dass die drei größten portablen, Tablet-ähnlichen Plattformen auf dem Markt unterschiedliche Sprachen für allgemeine Programmieraufgaben verwenden, ist das Verschieben des Codes möglicherweise keine sinnvolle Option.
quelle
Sie müssen C ++ / CX nicht verwenden, stattdessen können Sie die WRL ( Windows Runtime Library ) verwenden, die den alten ATL-Vorlagen ähnelt, und nicht C ++, das C ++ / CX ist. Es ist der "Low-Level" -Ansatz von MS, WinRT-Objekte zu konsumieren, und es ist vollständig Standard-C ++, wie Grandad es zum Schreiben verwendet hat!
Es ist vielleicht nicht so "nett" wie C ++ / CX, aber das ist Ansichtssache - meine persönliche Meinung ist, dass C ++ / CX der dritte Versuch eines erweiterten C ++ ist und ein dritter Fehler. Ignoriere es und hoffe, es geht genauso wie die anderen 2 Inkarnationen.
quelle