MPU: klasy cech kontenerów STL

Kolejna notatka z serii MPU, opisująca kilka ciekawych konstrukcji zawartych w mistycznym MetaPrograming-Unit. Tym razem o klasach cech opisujących typy kontenerów zawartych w STL. Każdy programista C++ zaznajomiony jest z klasami cech (traits) i ich wielkim potencjałem. Dla tych wszystkich, którzy nie do końca łapią temat, dwa zdania wprowadzające. Klasy cech w C++ są specyficznym … Czytaj dalej MPU: klasy cech kontenerów STL

MPU: begin i end

Według obietnicy w pierwszej notce odnośnie MPU chciałbym przedstawić najczęściej wykorzystywane element, które ułatwiają wykorzystywanie standardowych algorytmów operujących na zakresach dla danych przechowywanych w zwykłych tablicach. Oczywiście żaden problem, do tej pory (pomijając wszelkie biblioteki), tablice w łatwy sposób mogły być używane jako zakresy w dowolnej funkcji algorytmu z STL-a. Przeważnie robiło się to w … Czytaj dalej MPU: begin i end

MPU: Meta-Programing Unit

Wraz ze wzrostem doświadczenia, a raczej „wyklepanych linii kodu” i „przemielonych” projektów rośną nasze zasoby wiedzy, ale także zasoby elementów i własnych konstrukcji najchętniej wykorzystywanych w nowych projektach. Oczywiście pomijam tutaj sens robienia lub składowania czegokolwiek co znajduje się w bibliotece standardowej, boost lub milionie innych popularnych bibliotek, niemniej czasami, nawet te standardowe i najczęściej … Czytaj dalej MPU: Meta-Programing Unit

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 … Czytaj dalej TreeLinkedList

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 … Czytaj dalej Matrix

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 … Czytaj dalej Thin Template

C++ Templates are Turing Complete

Wzorce języka C++ spełniają wszystkie założenia maszyny Turinga. Przemyślenia i próby udowodnienia powyższego sformułowania można znaleźć w pracy „C++ Templates are Turing Complete” autorstwa Todd L. Veldhuizen. Małą ciekawostkę na temat limitów w wzorcach możemy znaleźć na końcu artykułu: […] the C++ standards committee allows conforming compilers to limit the depth of „recursively nested template … Czytaj dalej C++ Templates are Turing Complete

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 … Czytaj dalej numeric_limits

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> … Czytaj dalej Variadic templates