Na te wakacje zaplanowałem ukończyć tree_template (który od ostatnich dwóch commitów nosi nazwę data_tree) i nawet istnieje prawdopodobieństwo że to mi się uda - muszę się tylko sprężyć w te ostatnie 3 tygodnie. Biorąc pod uwagę przedział czasowy w którym projekt się rozwijał, zamiast klona boost::property_tree powinienem mieć już uniwersalną, całkowicie przenośną, powszechnie używaną (oraz chwaloną), relacyjną bazę danych ale wyszło (a nawet jeszcze nie) jak wyszło.
Deadline: 01-10-11.
Tytułowy błąd najczęściej występuje gdy kompilator (a dokładniej linker) nie może znaleźć odpowiedniego symbolu (YYY) do wstawienia w miejsce wywołania, które z kolei znajduje się najczęściej (jak łatwo zgadnąć) w funkcji XXX.
Od jakiegoś czasu staram się tłumaczyć na polski dość ciekawą stronę zawierającą opis standardowych bibliotek C/C++ oraz kilka drobnych informacji na temat języków - cppreference.com. Strona jest lekka i posiada ładnie podzielone kategorie - przydaje się w przypadku nauki STLa, ale też gdy zapomnę argumentów funkcji/szablonu.
Dzisiaj przetłumaczyłem stronę o preprocesorze - cppreference.com/preprocessor.
Zachęcam do lektury :)
W ramach przepisywania tree_template napisałem już dwie całkiem uniwersalne (moim zdaniem) klasy: text_path (opartą na std::string) oraz basic_path (będąca klasą bazową text_path. Obie struktury są kontenerami (szablonami) opartymi na std::list, oraz służą do przechowywania elementów ścieżek, które są zwykle tekstowymi nazwami kolejnych katalogów/gałęzi ale także mogą być dowolnego typu (basic_path).
Klasy czekają jeszcze na napisanie testów jednostkowych, jednak kilka szybkich testów (z którymi poprzednia implementacja nie dawała sobie rady) dało wyniki pozytywne.
W tej chwili tree_template jest... lekko mówiąc: reorganizowany. Wykorzystanie w/w klas wymaga zmian praktycznie w całym kodzie tree (opartym o metodę parsującą ścieżki) i zastanawiam się nad napisaniem go na nowo, jednak z drugiej strony poprzedni kod zawiera kilka przydatnych funkcji które mogą okazać się kiedyś przydatne... W razie potrzeby będę próbował przywrócić starą wersję z archiwum mercuriala.
No i mam dylemat. Zdaje się że boost::property_tree dość wydajnie pokrywa funkcjonalność tree_template, mimo że jego zastosowaniem zdaje się być składowanie danych konfiguracyjnych.
Mam do wyboru porzucić projekt i spróbować napisać coś innego (większego) ciągle bez doświadczenia. Albo wbrew wszystkiemu reimplementować pomysł już chyba dla samej satysfakcji.
Programistyczna logika każe wykorzystywać to co już zostało napisane (i działa), jednak z drugiej strony... zaawansowanie prac, doświadczenie, a nawet sentyment każą mi zostać przy tree_template.