Niezależny typ System::String w .NET i problem z konwersją w C++

Pisząc w VS2010 Windows Form Application natrafiłem na problem z konwersją typu System::String na liczbę np. float i na odwrót. Niestety stare dobre funkcje atof ( const char * str ) nie działają. Nasuwa się pytanie czym jest w takim razie ten nowy System::String? Gdzieś wyczytałem, że: System::String jest już niezależnym typem w .NET, a nie jak std::string mobilną klasą złożoną z tablicy charów. To wiele wyjaśnia, dlaczego nawet nie można konwertować zwykłego std::string’a na tego .NET’owskiego. Stworzenie tego stringa zostało wymuszone poprzez /clr, czyli środowisko uruchomieniowe wspólnego języka (Common Language Runtime). Deklaracja obiektu tego typu wygląda np. tak:

String ^ a;

Daszek jest w tym przypadku uchwytem do obiektu zarządzania C++/CLI. Ale wróćmy do postawionego problemu, jak skonwertować liczbę na typ System::String, oto bardzo proste rozwiązanie:

float x = 2.3;

System ^ y = x.ToString();

Tak na prawdę to było banalne, bo pamiętamy to jeszcze ze “zwykłego” stringa. A teraz zróbmy konwersję stringa na liczbę:

double tmp;
if(Double::TryParse(txtMoney->Text, d)){
// do somenthing with tmp
}
else{
// the text was not a number, show user an error if appropiate
}

Tutaj widzimy jest troszkę więcej zabawy, ale nadal nie ma w tym nic trudnego.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s