in diesem Artikel sucht hier der Hinweis auf Generika in der letzten Zeile gibt an, dass Generika in C++/CX mit Schnittstellen und Delegaten verwendet.
http://msdn.microsoft.com/en-us/library/windows/apps/br212455(v=vs.110).aspx
Dies macht Sinn, weil, da sie als eine Schnittstelle definiert, die die C++/CX-Compiler nativen Code Funktionen für die eigentlichen Objekte kompilieren können, und dann generische Schnittstellen in ähnlicher Weise wie C++ Vorlagen verwenden. Der native Code für die Funktionen wird kompiliert und die generische Schnittstelle wird verwendet, um mit den verschiedenen Typen zu arbeiten.
Für den Compiler scheint dies der Unterschied zwischen C++/CLR und C++/CX zu sein. /clr: Generics Klassen, Schnittstellen & Delegierten erlaubt. /ZW: Generische Schnittstellen & Delegierten nur.
Wenn Sie hier klicken http://msdn.microsoft.com/en-us/library/windows/apps/hh699870(v=vs.110).aspx werden Sie feststellen, dass es keine generischen Regeln für die Klassen gibt.
Aber wenn Sie dieses Thema lesen http://msdn.microsoft.com/en-us/library/windows/apps/hh755792(v=vs.110).aspx werden Sie feststellen, dass die Generika als Schnittstellen angewendet werden.
Eine "generische Klasse" in C++/CX wird durch Verwendung von Standard-C++ - Vorlagen erreicht. Die Instanziierung oder der vom Compiler erzeugte generische Typ wird in die Metadaten exportiert, nicht aber in die Vorlage selbst. Daher können Sie eine MyClass und eine MyClass aus den Metadaten, aber nicht aus der ursprünglichen MyClass sehen. Dies gilt nicht für den generischen Schnittstellenkoffer, der als generischer Typ in Metadaten exportiert wird.
Weitere Informationen zu diesem Thema finden Sie hier http://en.wikipedia.org/wiki/Windows_Runtime
So voll, die Frage zu beantworten, wie diese Zeit ist der Code in den Methoden vorkompilierte nativen Code in dem Ausgabe-DLL oder EXE und an tatsächlichen nicht angebracht generische Klassen. ABER der Code kann generisch verwendet werden, indem generische Schnittstellen benutzt werden. Also können zehn verschiedene Klassen IMyInterface implementieren, und dann kann eine Variable vom Typ IMyInterface verwendet werden, um beispielsweise mit Instanzen der zehn verschiedenen Typen zu arbeiten.
Also die kurze Antwort ist, es gibt nichts wie vollständige generische Klassen in C++/CX, wie es in C++/CLR gibt. Verwenden Sie Vorlagen für den gleichen Effekt in C++/CX-Anwendungen. Wenn Sie C++ - Generics benötigen, verwenden Sie eine DLL, die mit C++/CLI erstellt wurde, und führen Sie diesen Code aus einem Programm aus, das als C++/CX kompiliert wurde.
Hinweis! Ich habe so viel von der Untersuchung verschiedener Artikel erfahren, und einige von ihnen bei msdn scheinen zu sagen, dass sie sich ändern könnten.
Nun, die generischen Schnittstellen in C++/CX mit Vorlagen zu verwenden ist wahrscheinlich, was sie beabsichtigen. Sie erstellen also eine Vorlage namens MyClass und implementieren dann Ihre generische Schnittstelle MyInterface. Wenn Sie dann eine MyClass-Vorlageninstanziierung erstellt haben, implementiert der neue Typ automatisch MyInterface, und diese Schnittstelle kann dann überall verwendet werden. Außerhalb der kompilierten DLL und der Header-Dateien können andere C++/CX-Module und -Dateien mit Typen wie MyInterface arbeiten, ohne die Header-Datei zu benötigen, da die Template-Instanziierung innerhalb der kompilierten DLL erfolgte, aber eine C++ - Datei mit den Metadaten weiß Mache den MyInterface-Typ, weil er die Metadaten für MyInterface enthält, aber nicht die Metadaten für die MyClass.
In sehr kurzen gibt es keine generischen Klassen und die generische Schnittstelle und Delegate-Unterstützung in C++/CX ist alles, was tatsächlich funktioniert wie Generika in C++/CLI.
Riecht wie Java's "Lass uns alles in Objekt und dann wieder zurück" Ansatz für Generika. –
würde ein Laufzeit-basiertes Generic sein. C++ 's generische Art Löschen ist boost :: any, aber Sie sollten Runtime-Generics nicht tun, wenn Sie nicht müssen, und die meisten Menschen müssen nie. Verwenden Sie stattdessen Vorlagen. –
Ich denke, es ist eine Kompilierzeit Sache. Wenn eine Initiierung aufgetreten ist, wie "MyTemplate obj;", generiert der Compiler eine Kopie der konkreten Klassendefinition unter Verwendung von "MyTemplate" und "RealType" und verwendet sie dann zum Erstellen des Objekts. Es gibt keine Template-Sache nach der Kompilierung. –
Lyn