Dynamiczna deklaracja zmiennych.

0

Nie wiem, czy dobrze to określiłem.

Zamierzam stworzyć aplikację, która dopiero po odczytaniu jakiegoś pliku tekstowego będzie wiedziała jakiego typu i ile zmiennych zadeklarować.

Załużmy , że mam plik tesktowy "Dane.txt" zawierający takie wpisy :
Data int
Imie char

Przed odczytaniem tego pliku mój program nie wie , jakie zmienne będzie musiał zadeklarować.
Jednak po odczytaniu pliku "Dane.txt" będzie miał już informacje...
Czyli tworzę funkcję, która czyta plik "Dane.txt" i w oparciu o te dane deklaruję zmienne

int Data 

i char Imie

.
Czy jest możliwe w ogóle takie podejście, jesli tak  prosiłbym o wskazówki.
Pozdrawiam
0

Bezpośrednio nie. Pośrednio już tak - mapa z nazwami zmiennych + instancje Twoich klas reprezentujących dane typy.

0

Jeśli korzystasz z Qt to weź mapę z kluczami QString i z wartościami QVariant.
Jeśli korzystasz, ze standardowych bibliotek to możesz napisać swojego Variant (ale pewnie leży to poza twoimi możliwościami), albo trzymać różne typy w różnych mapach i samemu odpowiednio to obsłużyć.
Wszystko zależy od tego co dokładnie chcesz robić, z tymi symbolami.

0

Albo podejście a la ANSI C: wskaźniki void ;)

0

void ptr? Po jakiego grzyba, do czego i po co? Poza tym, że robienie większego evala na tym to jak masturbacja żyletką to wymagają kupy dodatkowych niskopoziomowych operacji, a te też są mało bezpieczne i wymagają sporo ostrożności.

0

pytanie bardziej, co dalej z tymi dynamicznie-utworzonymi zmiennymi chcesz robic? pachnie mi to pisanie wlasnego zagniezdzonego jezyka.. jesli zabierasz sie za cos powaznego, nie trac czasu i moze skorzystaj z jakichs gotowych silnikow? zend/php, ruby, albo chociaz .net i dynamiczne assemlby.. serio, duzo czasu i nerwow oszczedzisz

0

Spróbuj pokombinować z union. Dzięki temu można będzie interpretować zupę bajtową w zależności od tego jaki typ jest potrzebny. Wada - unia będzie zajmować w pamięci tyle, ile największy element.

0

Dupa nie union. Wsadź w unię coś, co nie jest PODem.

0

LOL, Ambasador absurdu...

0

Z tego co zauważyłem, to przecież była mowa o typach prostych (int, char)

0

QVariant albo boost::variant, zapewniają bezpieczne operacje na typach wariancyjnych, unia nie oferuje nic poza problemami. Najlepiej jeszcze unie trzymać przez void*...

0

Bardzo dziękuję za wskazówki. Skorzystałem z kontenera map. Typy sczytywane są podstawowe: int, float, double, char.
Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1