2009-05-07 23 views
5

Desidero dichiarare e inizializzare un array di elementi gestito 1D.Inizializzazione array in Managed C++

Se fosse codice C#, vorrei scrivere in questo modo:

VdbMethodInfo[] methods = new VdbMethodInfo[] { 
    new VdbMethodInfo("Method1"), 
    new VdbMethodInfo("Method2") 
}; 

Sto cercando di scrivere (beh, in realtà, sto scrivendo un programma di generare) la stessa cosa in C++ gestito .. .

Finora ho:

typedef array<VdbMethodInfo^, 1> MethodArray; 
// How do I avoid pre-declaring the size of the array up front? 
MethodArray^ methods = gcnew MethodArray(2); 
methods[0] = gcnew VdbMethodInfo("Method1"); 
methods[1] = gcnew VdbMethodInfo("Method2"); 

ci sono due problemi con questo:

  1. E 'più prolisso
  2. E mi obbliga a dichiarare la dimensione della matrice di fronte, che è scomodo per il mio generatore di codice

Esiste una sintassi "allineamento inizializzazione" per le matrici GC in Managed C++? Qual è la sintassi corretta? C'è un buon collegamento web per questa e altre domande simili?

risposta

25

La matrice C++/CLI dichiara la sintassi di inizializzazione & non diversa da quella in C#. Ecco un esempio ...

array<String^>^ myArray = gcnew array<String^> {"first", "second"}; 
+1

grazie - esattamente quello che stavo cercando! –

+0

Il decompilatore C++/CLI per riflettore mancava il gcnew e il tipo di array nella dichiarazione per qualche motivo. Aggiungendo quello risolto il problema. Grazie. http://www.sandpapersoftware.com/Main/Reflector.html – jpierson