Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2013, 18:59   #1
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию Literal operator

Читаю 4е издание Страуструпа, открыл для себя интересную штуку.
Сохраню здесь для себя, возможно и еще кому нибудь пригодится.
Код:
#include <iostream>

using namespace std;


constexpr int ipow(int x, int n)
{
    return n > 0  ? x * ipow(x, n - 1) : 1;
}

template <char...>
    struct Parse
    {
        template <char cur, char... tail>
            static constexpr int helper()
            {
                static_assert(cur >= '0', "illegal digits");
                static_assert(cur < '2', "illegal digits");
                return ipow(2, sizeof...(tail)) * (cur - '0') +
                       Parse<tail...>::template helper<tail...>();
            }
    };

template <>
    struct Parse<>
    {
        template <char ...>
            static constexpr int helper()   { return 0; }
    };


template<char... chars>
    constexpr int operator"" _b()      // literal operator
    {
        return Parse<chars ...>::template helper<chars ...>();
    }


int main()
{
    cout<<111010110111100110100010101_b;    // 123456789

    return 0;
}
220Volt вне форума Ответить с цитированием
Старый 12.10.2013, 20:32   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

да, я видел эту штуку. На хабре обсуждение тоже читал.
Не думал, что у Страуструпа оно описано (я полагал, оно из нового стандарта).

Но я прочитал и забыл (запомнил что есть такая фича, но не более). Сомневаюсь, что в жизни она мне пригодится.

Я так представляю, если в проекте код будет изобиловать такими штуками, то новым людям придется гораздо дольше вникать.

ЗЫ. Такой оператор можно определить для строк (string literal operator) и он, думаю более полезен - наверное можно кортежи описывать в строках. Но я не пробовал - не утверждаю, а предполагаю.
rrrFer вне форума Ответить с цитированием
Старый 12.10.2013, 20:37   #3
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Я бы назвал пример этого кода не как literal operator, а как variadic templates) Они и полезнее намного.
still_alive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
operator char*() + operator[](uint) riden Общие вопросы C/C++ 3 17.02.2013 08:45
operator= _Bers Общие вопросы C/C++ 2 18.04.2012 06:45
ошибка: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char> Critter Общие вопросы C/C++ 5 08.08.2010 23:38
operator() в С++ Andrey995 Помощь студентам 4 01.08.2010 03:26
operator<< Наташенька Общие вопросы C/C++ 6 08.06.2009 18:59