Próbuję napisać silnik obiektowego języka skryptowego w c++. Wymyśliłem sobie, że zmienne będą w nim działać jak w javascripcie czyli będą jednocześnie zmienymi, obiektami, tablicami lub funkcjami w zależności od kontekstu użycia, będą w moim programie reprezentowane jako stringi znajdujące się w asocjacyjnych tablicach struktur. Realizuję to poprzez "map" i strukturę "Struktura".
chciałem stworzyć funkcję, która dla stringa podanego w argumencie (będącego ścieżka po obiektach np. "foo.bar.si") zwracałaby wartość tego obiektu jako string (tj wartość struktura.nast['foo'].nast['bar'].nast[si].dane).
.. a później analogiczną zapisującą.
mój kod, który daje poprawne wyniki:
#include <iostream>
#include <map>
#include <string>
using namespace std;
//inicjacja struktury danych->drzewko
struct Struktura
{
map<string, Struktura> nast;
string dane;
};
struct Struktura struktura;
//koniec inicjacji struktury
string czytaj_obiekt(string lokacja)
{
//tutaj powinna być pętla, która iterując kawałki "lokacja" dochodziłaby do wymaganego pola
struct Struktura tmp;
tmp=struktura.nast["a"];//symulacja pętli dla przykładu poniżej
tmp=tmp.nast["2"];
lokacja=tmp.dane;
return lokacja;
}
string perse(string input)
{
string output;
return output;
}
int main()
{
struktura.nast["a"].nast["1"].dane="kot";
struktura.nast["a"].nast["2"].dane="pies";
cout<<czytaj_obiekt("a.2");//powinno wyświetlić "pies"
int a;
cin>>a;
return a;
}
cały problem polega na tym, ze to rozwiązanie tj. funkcja czytaj_obiekt() za każdym przebiegiem pętli kopiuje całą strukturę , co przy większej ilości danych jest bardzo czasochłonne. Próbowałem robić to ze wskaźnikami, ale nic mi nie wychodziło. wie ktoś jak to rozwiązać? Acha... i czy map użyłem poprawnie oraz czym różni się multimap? Jestem kompletnym laikiem jeśli chodzi o C++, mam kupę z ANSI C przyzwyczajeń i w c++ czuję się "obco", więc nie wiem czy ten kod ma jakikolwiek sens- może można to zrealizować lepiej, ładniej i krócej?