C++17 formalnie (prawie) gotowe…

W marcu tego roku, na spotkaniu komitetu standaryzacyjnego C++ w Kona, technicznie zakończono prace nad nową odsłoną standardu języka C++. Nowy draft DIS (N4660) przesłano do finalnego balotowania przez ISO (ISO ballot) i za 5-6 miesięcy oficjalnie powitamy C++17. Zapewne, prócz drobnych ewentualnych korekt w dokumencie, technicznie nic się nie zmieni, więc nieformalnie takie drafty … Czytaj dalej C++17 formalnie (prawie) gotowe…

Opublikowano Kategorie /dev/null

Co słychać w nadchodzącym C++14

Powolnymi, acz zdecydowanymi krokami zbliża się nowy standard języka C++ oznaczony jako C++14. Niektórzy jeszcze nie oswoili się z C++11, a biznes ciągle w epoce kamienia łupanego – C++98/03, bądź „C z klasami”. A tutaj wkrótce kolejna dawka nowości i emocji. Od czasu wejścia obecnego standardu, komitet nieźle przyspieszył, można powiedzieć, że wreszcie chce nadążać … Czytaj dalej Co słychać w nadchodzącym C++14

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

Algorytmy STL na tablicach

Często w programach napisanych w C do pobierania rozmiaru tablic alokowanych przez kompilator na stosie stosuje się prostą konstrukcję z operatorem sizeof, opakowana w makro: #define SizeOfArray(array) sizeof(array) / sizeof(array[0]) W C++ zamiast makra lepiej wykorzystać wzorzec, a wtedy można to przedstawić tak: template<typename T, size_t N> inline size_t SizeOfArray(const T (&)[N]) { return N; … Czytaj dalej Algorytmy STL na tablicach

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

copy_if

Nic nie jest doskonałe, tak samo STL ma swoje braki i przeoczenia. W standardowej bibliotece języka C++ zabrakło bardzo użytecznego algorytmu – copy_if – kopiowania z predykatem. Prawdopodobnie został on usunięty przez przypadek z dostarczanych przez bibliotekę algorytmów generycznych, ale z tego co się orientuję, można znaleźć o nim wzmianki w drafcie nowego standardu – … Czytaj dalej copy_if

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