На этот раз сделать это меня заставила [»] статья, о которой я уже писал в прошлом посте (да, вот такой я тормоз). Статья эта — об expression templates, т.е. о технике программирования, которая позволяет делать сделующие невероятные вещи — например, писать вот так:
evaluate(x*x+2, 0.0, 10.0);Т.е. можно парсить выражение во время компиляции и потом пользоваться этим выражением — именно выражением, а не его результатами. Прямо его, безо всяких лишних функций и передавать как параметр. ОЧЕНЬ удобно и здорово. Просто нет слов как.
..и это будет, например, выводить значение выражения x*x+2 для x от 0 до 10;
или так:
ListmyCollection;
IntPlaceholder y;
int n = myCollection.count(y >= 0 && y <= 100);
..и это сможет записать в n количество элементов myCollection, которые больше 0 и меньше 100.
И это очень просто. И я сейчас хорошо понимаю, как это работает. Обычное синтаксическое дерево, но прямо во время компиляции. Но как же я сам не догадался до этого!? Или хотя бы не увидел этого где-то раньше?
Ну на каком ещё языке можно делать такие вещи? А? Всё-таки, я люблю C++ (хотя не только его, конечно:).
* Последний раз я падал со стула когда увидел [»] lambda::boost, а до этого — когда читал третью главу [»] книжки Александреску.
Update: А статья-то аж 1995-го года. Да это ещё и описано в [»] C++ Gems. Ну почему её здесь так и не издали? Всё-таки, я её должен заказать-таки в Amazon. Не всё-же ей в [»] wishlist висеть.