Основы метапрограммирования на шаблонах
От: x-code  
Дата: 30.03.20 08:04
Оценка:
Задумался над тем, что лежит в основе метапрограммирования на шаблонах в С++.
И получилось примерно вот это:
* явная специализация шаблонов позволяет делать "ветвления"
template<class T, class S>
struct IsSame { static const bool value = false; };
template<class T> 
struct IsSame <T, T> { static const bool value = true; };


* правило SFINAE позволяет отбрасывать некоторый код и управлять специализацией шаблонов в зависимости от каких-то условий времени компиляции, тоже помогая в реализации ветвлений
template <bool condition, typename Type>
struct EnableIf;
 
template <typename Type>
struct EnableIf<true, Type>
{
    using type = Type;
};

* рекурсивные шаблоны позволяют делать "циклы"
template <int N>
struct Factorial 
{
    enum { value = N * Factorial<N - 1>::value };
};
template <>
struct Factorial<0> 
{
    enum { value = 1 };
};

* операторы получения метаинформации времени компиляции (sizeof и decltype) позволяют извлекать дополнительную информацию из компилятора, которая в некоторых случаях используется для управления специализацией и тем самым "ветвлениями" и "циклами"

как добавка, без которой тоже можно, но которая в некоторых случаях добавляет удобства
* шаблоны с переменным числом параметров
* концепты формально введены все-же не для метапрограммирования, а для типизации самих шаблонов, чтобы нельзя было передать любую фигню в шаблон, на это не рассчитанный. Хотя кто знает, как их станут использовать?

Все ли я учел или что-то упустил?
Отредактировано 30.03.2020 8:05 x-code . Предыдущая версия .
Re: Основы метапрограммирования на шаблонах
От: LaptevVV Россия  
Дата: 30.03.20 08:31
Оценка:
XC>Все ли я учел или что-то упустил?
Медитируем на книжку
Чарнецки К., Айзенекер У. Порождающее программирование: методы, инструменты, применение. — СПб.: Питер, 2005. — 731 с.
Читаем Часть 2.
Там глава 10. Статическое метапрограммирование на языке С++.
И, в частности, 10.11. Структуры управления периода компиляции.
Вообще книжка интереснейшая!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Основы метапрограммирования на шаблонах
От: velkin Удмуртия http://blogs.rsdn.org/effective/
Дата: 30.03.20 08:55
Оценка:
Здравствуйте, x-code, Вы писали:

XC>Задумался над тем, что лежит в основе метапрограммирования на шаблонах в С++.


Как минимум полиморфизм. Хотя способ реализации разный, но это общая черта объектно-ориентированного и обобщённого программирования.
Re: Основы метапрограммирования на шаблонах
От: kov_serg Россия  
Дата: 01.04.20 09:03
Оценка:
Здравствуйте, x-code, Вы писали:

XC>Задумался над тем, что лежит в основе метапрограммирования на шаблонах в С++.

...
XC>Все ли я учел или что-то упустил?

Главное забыл: тех кто продолжает упорно грызть кактусы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.