вторник, 18 ноября 2014 г.

[Из песочницы] Literal operator templates for strings @habrahabr



Стандарт C++11 привнес в язык такую вещь, как пользовательские литералы[1] . Конкретно — дюжину вариантов для определения оператора "", добавляющих небольшой синтаксический сахар, всех, за исключением одного — шаблонного варианта:




template <char...> type operator "" _op();




Отличается этот вариант тем, что он не просто дает альтернативный вариант вызова функции с помощью суффикса, а позволяет определить свои правила парсинга передаваемого аргумента на этапе компиляции, расширяя тем самым возможности компилятора.



Например:




auto x = 10001000100011001001001010001000_b;




Однако при разработке стандарта было допущено небольшое упущение — шаблонный вариант пользовательского литерала позволяет работать только с числовыми аргументами, несмотря на то, что парсинг их осуществляется посимвольно.

Такое упущение, конечно же, не могло остаться не замеченным, и на этапе согласования стандарта C++14 было предложено решение для строковых аргументов[2]




template <typename CharT, CharT ...String> type operator "" _op();




В скором времени было реализовано в компиляторах GCC[3] и clang (GNU extension). Однако в финальную редакцию стандарта C++14 так и не попало. Впрочем, не будем отчаиваться, есть надежда, что нас обрадует C++17. А пока посмотрим, как можно будет применять новый тип пользовательских литералов.

Читать дальше →



via Хабрахабр / Интересные / Тематические публикации http://ift.tt/1wThF9Y

Комментариев нет:

Отправить комментарий