Философско-практические вопросы про метапрограммирование
От: Максим Россия  
Дата: 08.02.23 10:17
Оценка: +3
Сейчас читаю книгу C++ Templates: The Complete Guide (2nd Edition) by David Vandevoorde, Nicolai M. Josuttis and Douglas Gregor https://www.cppstories.com/2018/05/tmplbook2nd-review/
Вот что немного затрудняет продвижение, так это многостраничные объяснения как сделать одно и то же в 11, 14 и 17 плюсах. Отсюда вопрос, на ваш взгляд, имеет ли смысл сейчас запариваться с предыдущими стандартами? Такое ощущение, что через год С++20 уже будет повсеместно, может имеет смысл сразу его осваивать? Там, насколько я понял, куча всяких нововведений типа концептов, которые еще сильнее могут упростить код.

Потом еще один момент. Стандартная библиотека предлагает кучу утилитных методов для метапрограммирования. Часть из них, что-то типа std::is_class можно реализовать, например, используя SFINAE

template<typename T>
class is_class
{
    typedef char yes[1];
    typedef char no[2];
 
    template<typename C>
    static yes& test(int C::*); // selected if C is a class type
 
    template<typename C>
    static no& test(...);       // selected otherwise
public:
    static bool const value = sizeof(test<T>(0)) == sizeof(yes);
};


Другие методы, по моим ощущениям (например std::result_of/std::invoke_result или noexcept operator), можно реализовать только на уровне компилятора. Отсюда вопрос, надо ли пытаться понять как это все внутри работает или подобные утилиты для метапрограммирования из стандартной библиотеки просто принять как данность?

UPD.
Забыл про философский вопрос Короче заметил, что плюсовое метапрограммирование представляют для меня пока просто какой-то хаотичный набор приёмов, методов, синтаксиса, а какая-то цельная картина происходящего не складывается. Я подумал, может это из-за недостаточной теоретической базы? Как думаете, более глубокое изучение функциональных парадигм и языков (haskell, ocaml или что-то подобное) поможет в этом? Там все таки система типов гораздо серьезней проработана... Или пустое это?
Errare humanum est
Отредактировано 08.02.2023 10:30 Максим . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.