Guardando a questo articolo qui il riferimento a generici sull'ultima riga specifica che i generici sono utilizzato in C++/CX con interfacce e delegati.
http://msdn.microsoft.com/en-us/library/windows/apps/br212455(v=vs.110).aspx
questo senso perché essendo definita come un'interfaccia che consente l'++/CX compilatore C per compilare funzioni di codice nativo per gli oggetti reali, e quindi utilizzare interfacce generiche in modo simile ai modelli C++. Il codice nativo per le funzioni è compilato e l'interfaccia generica viene utilizzata per lavorare con i diversi tipi.
Per il compilatore sembra che questa sia la differenza tra C++/CLR e C++/CX. /clr: Classi generiche, interfacce & delegati consentiti. /ZW: interfacce generiche solo & delegati.
Se guardate qui http://msdn.microsoft.com/en-us/library/windows/apps/hh699870(v=vs.110).aspx noterete che non ci sono regole generiche per le classi.
Ma se leggi questo argomento http://msdn.microsoft.com/en-us/library/windows/apps/hh755792(v=vs.110).aspx noterai che i generici vengono applicati come interfacce.
Una "classe generica" in C++/CX viene ottenuta utilizzando modelli standard C++. L'istanziazione o il compilatore generato tipo specifico del generico viene esportato nei metadati, ma non nel modello stesso. Così puoi vedere una MyClass e una MyClass dai metadati, ma non dalla MyClass originale. Questo non è vero per il caso dell'interfaccia generico che viene esportato nei metadati come tipo generico.
Ulteriori informazioni su questo può essere trovato qui http://en.wikipedia.org/wiki/Windows_Runtime
Quindi, per rispondere pienamente alla domanda, a partire da questo momento, il codice nei metodi è il codice nativo precompilato nella DLL di output o exe ed è collegata a non reale classi generiche. MA il codice può essere utilizzato genericamente utilizzando interfacce generiche. Quindi dieci diverse classi possono implementare IMyInterface e quindi una variabile di tipo IMyInterface può essere utilizzata per lavorare con istanze dei dieci diversi tipi, ad esempio.
Quindi la risposta breve è che non c'è niente come le classi generiche complete in C++/CX come in C++/CLR. Usa modelli per lo stesso effetto in applicazioni C++/CX. Se è necessario disporre di generici C++, utilizzare una dll creata con C++/CLI e lavorare quel codice da un programma compilato come C++/CX.
Nota! Ho dedotto molto dall'esame di vari articoli e alcuni di loro su msdn sembrano dire che potrebbero essere soggetti a modifiche.
Ora utilizzare le interfacce generiche in C++/CX con i modelli è probabilmente ciò che intendono. Quindi crei un modello chiamato MyClass e quindi implementa la tua interfaccia generica chiamata MyInterface, quindi se hai creato un'istanza di template MyClass, il nuovo tipo implementerà automaticamente MyInterface e questa interfaccia potrà quindi essere utilizzata ovunque. Quindi, al di fuori della dll compilata e dei file di intestazione, altri moduli e file C++/CX possono funzionare con tipi come MyInterface senza bisogno del file di intestazione, perché l'istanza del modello era all'interno della dll compilata, ma un file C++ che utilizza i metadati sa come crea il tipo MyInterface perché ha i metadati per MyInterface, ma non i metadati per MyClass.
In breve non ci sono classi generiche e l'interfaccia generica e il supporto delegato in C++/CX è tutto ciò che in realtà funziona come generici in C++/CLI.
Odora l'approccio di Java "gettiamo tutto in Oggetto e poi di nuovo" ai generici. –
sarebbe un generico basato sul runtime. La cancellazione di tipo generico di C++ è boost :: any, ma non dovresti fare generici di runtime se non devi, e la maggior parte delle persone non deve mai farlo. Utilizza invece i modelli. –
Penso che sia una cosa a tempo di compilazione. Quando è stata riscontrata un'iniziazione, come "MyTemplate obj;", il compilatore genera una copia della definizione di classe concreta utilizzando "MyTemplate" e "RealType", quindi la utilizza per creare l'oggetto. Non c'è una cosa modello dopo la compilazione. –
Lyn