Anton Volnuhin (anton) wrote,
Anton Volnuhin
anton

Об expression templates, с трудом поднявшись с пола [C++]

Не смотря на то, что, казалось бы, ничего уже не может меня удивить, C++ продолжает периодически заставлять меня сваливаться со стула.

На этот раз сделать это меня заставила [»] статья, о которой я уже писал в прошлом посте (да, вот такой я тормоз). Статья эта — об expression templates, т.е. о технике программирования, которая позволяет делать сделующие невероятные вещи — например, писать вот так:
evaluate(x*x+2, 0.0, 10.0);
..и это будет, например, выводить значение выражения x*x+2 для x от 0 до 10;

или так:

List myCollection;
IntPlaceholder y;
int n = myCollection.count(y >= 0 && y <= 100);

..и это сможет записать в n количество элементов myCollection, которые больше 0 и меньше 100.
Т.е. можно парсить выражение во время компиляции и потом пользоваться этим выражением — именно выражением, а не его результатами. Прямо его, безо всяких лишних функций и передавать как параметр. ОЧЕНЬ удобно и здорово. Просто нет слов как.
И это очень просто. И я сейчас хорошо понимаю, как это работает. Обычное синтаксическое дерево, но прямо во время компиляции. Но как же я сам не догадался до этого!? Или хотя бы не увидел этого где-то раньше?

Ну на каком ещё языке можно делать такие вещи? А? Всё-таки, я люблю C++ (хотя не только его, конечно:).

* Последний раз я падал со стула когда увидел [»] lambda::boost, а до этого — когда читал третью главу [»] книжки Александреску.

Update: А статья-то аж 1995-го года. Да это ещё и описано в [»] C++ Gems. Ну почему её здесь так и не издали? Всё-таки, я её должен заказать-таки в Amazon. Не всё-же ей в [»] wishlist висеть.
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 1 comment