#templates

wszystkie notatki oznaczone etykietą "templates"

TreeLinkedList

Dziś kilka słów o mojej prostej strukturze TreeLinkedList. Jest to prosta drzewiasta struktura, jak sama nazwa wskazuje można ją sobie wyobrazić jako skrzyżowanie drzewa z listą, a dokładniej to hierarchiczne powiązanie drzewem kilku list, gdzie każda gałąź jest listą elementów, które są kolejnymi gałęziami. Twór ten jest bardzo zbliżony do B-tree, aczkolwiek nie posiada wszystkich cech tego typu drzew, jedynie strukturalne podobieństwo. Najprościej byłoby przedstawić ideę graficznie, ale niestety moje predyspozycje graficzne oraz chęci są nikłe.

Czytaj dalej

Matrix

Kiedyś, prawie rok temu kombinowałem coś z dwuwymiarowymi tablicami dynamicznymi. W projekcie xime, lista kontaktów wykorzystuje prostą implementację takowej tablicy opartą na małym rozszerzeniu standardowego wektora. Tablica ta odzwierciedla widoczne w danej chwili w kontrolce elementy, zawiera wskaźniki, bądź proste elementy z wskaźnikami do elementów kontaktów umieszczonych w powiązanym drzewie, coś w stylu B-tree. Idea działania tablicy jest dokładnie taka, jaką opisano w wspomnianej notce, jako ostatnie rozwiązanie. Miałem ostatnio chwilkę, to poprawiłem i doprowadziłem do porządku kod tablicy dwuwymiarowej używany w xime, aby można było go wykorzystać w dowolnym innym miejscu.

Czytaj dalej

Thin Template

Szablony są bardzo elastycznym elementem języka programowania, a ich wykorzystywanie jest bardzo użyteczne. Użycie ich pozwala redukować i minimalizować pisanie oraz powielanie kodu. Jak wiemy konkretyzacja dla danego typu wykonywana jest tylko do używanych metod w szablonach klas, przez co nie jest generowany niepotrzebny kod. Niestety generowany kod wynikowy jest już nieco rozbudowany. Każda konkretyzacja szablonu jest osobna klasa, a dla każdej klasy generowany jest pełny kod potrzebnych funkcji. W przypadku konkretyzacji wzorca typem wskaźnikowym dla każdego rodzaju wskaźnika zostanie wygenerowany “inna” klasa a wraz z nią “podobny” kod wynikowy.

Czytaj dalej

Wzorce w C++ są Turing-Complete

Wzorce języka C++ spełniają wszystkie założenia maszyny Turinga. Przemyślenia i próby udowodnienia tego sformułowania można znaleźć w pracy “C++ Templates are Turing Complete” autorstwa Todda L. Veldhuizena. Małą ciekawostkę na temat limitów we wzorcach możemy znaleźć na końcu artykułu: […] the C++ standards committee allows conforming compilers to limit the depth of “recursively nested template instantiations,” with a recommended minimum limit of 17. Compilers have adopted this limit, many with an option to increase it.

Czytaj dalej

Wzorzec numeric_limits

Standardowa biblioteka języka C++ zawiera wiele ciekawych i przydatnych narzędzi w codziennej pracy developera C++, a po wejściu w życie C++0x będzie jeszcze ciekawiej. Czasem nawet nie mamy świadomości lub zapominamy o ciekawych perełkach jakie można tam znaleźć. Jednym z zapomnianych i chyba rzadko używanych komponentów biblioteki STL jest szablon numeric_limits będący “odłamkiem” numerycznej części biblioteki. Wzorzec ten wraz z specjalizacjami dla typów wbudowanych zdefiniowany jest w pliku nagłówkowym limits. Jego przeznaczeniem jest dostarczenie informacji o cechach typów numerycznych.

Czytaj dalej

Variadic templates

Niedawno marudziłem o makrach i funkcjach ze zmienną liczbą argumentów, więc dziś do uzupełnienia tego tematu wspomnę kilka słów o wzorcach ze zmienną liczbą parametrów, czyli Variadic templates, które niebawem staną się oficjalną częścią standardu języka C++. Modelowa, prosta funkcja wzorcowa, która jako przykład występuje prawie w każdej wzmiance na temat “nowego ficzera”. template<typename T> void print(const T& t) { std::cout << t; } template<typename T, typename... Args> void print(const T& t, const Args&.

Czytaj dalej