• Variadic template c++?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Этакая рекурсия на этапе компиляции. Например, изначально шаблон специфицирован n параметрами (... как раз подразумевает неизвестное количество параметров). Если n==1, то выбирается первая функция, и результат возвращается сразу. Иначе n > 1 и выбирается вторая функция. Все параметры шаблона разбиваются по принципу параметр 1, параметр 2, всё, что осталось. Параметр 2(b) нужен в этом случае для того, чтобы не произошло конфликта при n == 1. Далее шаблон снова специфицируется, уже меньшим количеством параметров. По индукции получаем конечность этого процесса.

    В современном С++ не силён, так что в терминах могут быть ошибки.
    Ответ написан
    Комментировать
  • Variadic template c++?

    @Mercury13
    Программист на «си с крестами» и не только
    Этот шаблон вычисляет при компиляции такое:
    rbv<false, false, true, true>() = 11002.

    И состоит из двух частей.
    1. Для одного параметра у нас напрямую написан шаблон.

    2. Для false, false, true, true — у нас используется второй шаблон: a=false, b=false, d = (true, true).
    И он равняется (rbv<false, true, true> << 1) + false.

    Чтобы вычислить новый rbv, снова работает второй шаблон: a = false, b = true, d = (true).
    И он равняется (rbv<true, true> << 1) + false.

    Для третьего rbv у нас a = true, b = true, d = ().
    Внимание, список d может быть и пусттым. Потому, чтобы не было конфликта с первым шаблоном, второй пишется для двух и более параметров.
    И третье наше значение равняется (rbv<true> << 1) + true.

    Вот тут работает первый шаблон и получается 112.
    Дальше уже можно вычислить все rbv по очереди и получить 11002.
    Ответ написан
    4 комментария