Ostatnio na kursie C# tutaj: http://www.microsoftvirtualacademy.com/training-courses/c-fundamentals-for-absolute-beginners odkryłem istnienie zmiennej w C# nazwanej var. Przyjmuje ona albo tekst, cyfrę, obiekt itp. i to jest coś czego nie ma w C++, ale może wiecie czy można jakoś "obejść" to ograniczenie? Chodzi mi o to ,żeby w C++ użytkownik podawał zmienną lecz mogłaby ona być liczbą lub stringiem.
OrientMantis24 napisał(a):
Ostatnio na kursie C# tutaj: http://www.microsoftvirtualacademy.com/training-courses/c-fundamentals-for-absolute-beginners odkryłem istnienie zmiennej w C# nazwanej var. Przyjmuje ona albo tekst albo cyfrę
Niedokładnie, bo piszesz to tak jakby var mogło być tylko intem/floatem/czymśtam i Stringiem. Do vara można też przypisać obiekt klasy/struktury czy typy anonimowe.
W c++ ten mechanizm umożliwia auto
. Warto dodać, że to nadal jest silne typowanie. Jedyna różnica jest taka, że zamiast pisać explict typ zmiennej pozostawiasz tę kwestię w rękach kompilatora.
odkryłem istnienie zmiennej w C# nazwanej var. Przyjmuje ona albo tekst, cyfrę, obiekt itp. i to jest coś czego nie ma w C++
Już jest.
var
czy auto
to nie jest żaden nowy, "uniwersalny" typ, tylko informacja dla kompilatora by „zgadł” typ na podstawie przypisanej wartości.
var i = 42;
// zmienna i jest na stałe typu int, więc to przypisanie będzie błędem:
i = "ala ma kota";
// ale to jest ok:
i = 555;
Chodzi mi o to ,żeby w C++ użytkownik podawał zmienną lecz mogłaby ona być liczbą lub stringiem.
Tego nie da się zrobić za pomocą var.
To mechanizm, znany może bardziej z systemów typów języków funkcyjnych, który nazywa się: inferencja typów (type inference).
Dodam, że o ile var
w C# i auto
w C++ zaoszczędzają jedynie pisania, nic praktycznie nowego nie dając, to w C# do dynamicznego typowania służy słowo dynamic
:
dynamic foo = new KlasaA();
foo.a(); // metoda klasy A
foo = new KlasaB();
foo.b(); // metoda klasy B
foo = 42;
w C++ tego nie ma - ale w bibliotece Boost jest coś co się nazywa Any, i chyba do tego służy. nie bawiłem się.