![][1]Создатели шаблонов в C++ заложили основу целого направления для исследований и разработки: оказалось, что язык шаблонов C++ обладает _полнотой по Тьюрингу_, то есть метапрограммы (программы, предназначенные для работы на этапе компиляции) C++ в состоянии вычислить всё _вычислимое_. На практике мощь шаблонов чаще всего применяется при описании обобщенных структур данных и алгоритмов: STL (_Standard Template Library_) тому живой пример.
Однако, с приходом C++11 с его `variadic`-шаблонами, библиотекой `type_traits`, кортежами и `constexpr`'ами метапрограммирование стало более удобным и наглядным, открыв дорогу к реализации многих идей, которые раньше можно было воплотить только с помощью расширений конкретного компилятора или сложных многоэтажных макросов.
В данной статье будет разработана реализация бинарного дерева поиска времени компиляции: структуры данных, являющейся логическим «расширением» кортежа. Мы воплотим бинарное дерево в виде шаблона и попрактикуемся в метапрограммировании: переносе рекурсивных и не только алгоритмов на язык шаблонов C++.
[Читать дальше →][2]
[1]:
https://habrastorage.org/files/949/988/20a/94998820a4d14182926c448ff44c6787.png
[2]:
https://habrahabr.ru/post/320686/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut