Шаблон C ++ с вариационной специализацией для количества аргументов - PullRequest
0 голосов
/ 26 мая 2018

Каков наилучший способ создания специализации для шаблона (класса), который принимает аргументы шаблона с переменным числом аргументов.

В моем сценарии использования у меня есть класс, который принимает несколько целых чисел, и я хочу специализацию для случая, когда в качестве аргумента есть только одно целое число, но значение целого может быть произвольным.

Например:

template <int a, int ...b>
class c {
    private:
        c<b...> otherClass;
}

template <int a>
class c {
     // Some base case
}

Возможно ли это сделать или какой самый простой способ получить такую ​​специализацию?

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Обычной специализации шаблона будет достаточно, если я правильно понимаю ваш вопрос.

#include <iostream>

template <int a, int ...b>
struct c {
    c() { std::cout << "Normal" << std::endl; }
};

template <int a>
struct c<a> {
     c() { std::cout << "Special" << std::endl; }
};

int main() {
    c<1,2> c1;
    c<2> c2;
}
0 голосов
/ 26 мая 2018

Для специализаций шаблонов классов к имени класса добавляются параметры шаблона:

template <int a>
class c<a> {};
       ^^^
...