#metaprogramowanie

wszystkie notatki oznaczone etykietą "metaprogramowanie"

Algorytm copy_if

Nic nie jest doskonałe. Tak samo C++ i STL ma swoje braki i różne przeoczenia. W standardowej bibliotece języka C++ zabrakło bardzo użytecznego algorytmu, jakim jest copy_if, czyli kopiowania z predykatem. Prawdopodobnie został on usunięty przez przypadek z dostarczanych przez bibliotekę algorytmów generycznych. Na szczęście z tego co się orientuję, można znaleźć o nim wzmianki w drafcie nowego standardu (C++0x), także jest szansa, że błąd ten zostanie naprawiony. Tymczasem, jeśli jest potrzeba, to można korzystać z bardzo prostej implementacji tego algorytmu:

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

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