Är ingen hejare på C++ men nu tvingas jag jobba med det ändå eftersom jag behöver koppla C++-API:er till min applikation.
Har satt upp ett projekt med "managed" C++ i VS, och håller på med att rita upp ett .NET Windows-formulär (System::Windows::Forms).
Fungerar bra, men det är en sak jag retar mig på. När jag fyller en GroupBox så förväntar sig metoden Controls->AddRange en vektor med pekare på Control-object. Går att göra såhär:
Control __gc* myCtrl[] = {static_cast<Control*> (this->myButton), static_cast<Control*> (this->myTextBox)};
this->myGroupBox->Controls->AddRange(myCtrl);
Men jag vill kunna göra detta i en rad. Utan att behöva gå via myCtrl. Borde väl gå, eller?
Det går inte, vad jag vet. Du skulle dock kunna skapa vektorn i en egen funktion och returnera den. Det ger dig ingen möjlighet att frigöra vektorn, men eftersom du använder garbage collection kan det fungera.
Ungefär så här:
this->myGroupBox->Controls->AddRange(CreateRange(...));
Får jag inte samma problem när jag skall skicka kontrollerna till funktionen (har flera GroupBox)? Det logiska är väl att skicka en vektor med pekare till funktionen, men då är jag tillbaka på ruta ett.
Inget stort problem. Det är bara perlkodaren i mig som retar sig på att behöva deklarera pekarnamn jag aldrig använder. :)
Jag lyckades inte heller med detta. Det går utmärkt från C# så frågan är om det är en begränsning i managed c++ eller om vi bara inte förstår hur man gör. Du kan ju prova att fråga på news://msnews.microsoft.com/microsoft.public.dotnet.languages.vc
Även om du behöver en temporär pekare, optimeras den med största säkerhet bort redan vid kompileringen, så prestandamässigt är det ingen skillnad.
286 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e