Pull to refresh

Comments 5

Да уж, глубина глубин... А ведь вы еще даже метапрограммирование на шаблонах не затронули! И самое главное - как удалось породить такое из простой, естественной и очевидной идеи параметризировать классы и функции на этапе компиляции по типу макросов. Универсальный, не зависящий от типа данных код для классов массивов, списков, алгоритмов поиска и сортировки и т.п.... Просто и естественно. И вот во что это вылилось.

Ну так и используйте только для этого. Никто вас не заставляет ни вариадики, ни parameter pack и тд использовать.

посмотрите на машину тьюринга. Шаг влево, шаг вправо, условие перехода, останова — и ВНЕЗАПНО простая система полна по тьюрингу, можно выразить почти что угодно, хотя описать её — проще чем описать молоток!


Шаблоны это просто, естественно и функционально. Замечательно же! :) То что на sed можно написать тетрис — никто не заставляет писать вас тетрис, используйте sed для того чтобы заменить слово в строке.

Вот только не надо приплетать сюда политику. Статья хорошая и интересная. Метапрограммирование это тема отдельной статьи и не всем это надо. Примеры хорошие прикладные, и не заезженная тема статьи. Мне понравилось!

Класс, я бы хотел добавить еще два пункта:

  • Частичная специализация доступна для шаблонных классов, но не для функций. Это супер не очевидно и вызывает боль при попытке разобраться в первый раз

template <class A, class B>
void foo();  // шаблонная функция

foo<int, int>() // можно
foo<int>() // нельзя
  • Возвращаемый тип не участвует в дедукции типов. Только параметры участвуют

template <class A, class B>
A foo(B value);

int foo(int value); // нельзя, частичная специализация, хотя казалось бы

Sign up to leave a comment.