2009-05-07 17 views
5

Chcę zadeklarować i zainicjować tablicę elementów zarządzanych 1D.Inicjowanie tablic w zarządzanym C++

Jeśli był kod C#, chciałbym napisać to tak:

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

Staram się pisać (no, rzeczywiście, piszę program wygeneruje) samo w zarządzanym C++ .. .

Do tej pory mam:

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"); 

Istnieją dwa problemy z tym:

  1. To bardziej gadatliwy
  2. Wymaga mi deklarować rozmiar tablicy z góry, co jest niewygodne dla mojego generator kodu

Czy istnieje „array inicjalizacji” składnia dla tablic GC w Managed C++? Jaka jest prawidłowa składnia? Czy istnieje dobry link do tego i innych podobnych pytań?

Odpowiedz

25

Tablica C++/CLI deklaruje, że składnia inicjalizacyjna & nie jest odmienna od tej w C#. Oto przykład ...

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

Dzięki - dokładnie to, co szukałem! –

+0

W dekompilatorze C++/CLI dla odbłyśnika brakowało gcnew, a typ tablicy w deklaracji z jakiegoś powodu. Dodanie tego rozwiązało problem. Dzięki. http://www.sandpapersoftware.com/Main/Reflector.html – jpierson