Специализация шаблона C ++ с постоянным значением

Есть ли простой способ определить частичную специализацию класса шаблона C ++ с учетом числовой константы для одного из параметров шаблона? Я пытаюсь создать специальные конструкторы только для определенных типов комбинаций шаблонов:

template <typename A, size_t B> class Example
{
    public:
        Example() { };

        A value[B];
};

template <typename A, 2> class Example
{
    public:
        Example(b1, b2) { value[0] = b1; value[1] = b2; };
};

Этот пример не компилируется, возвращая ошибку Ожидаемый идентификатор перед числовой константой во втором определении.

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

Изменить:

Ищете способ написать условно используемый конструктор, что-то функционально вот так:

template <typename A, size_t B> class Example
{
    public:
        // Default constructor
        Example() { };

        // Specialized constructor for two values
        Example<A,2>(A b1, A b2) { value[0] = b1; value[1] = b2; };

        A foo() {
          A r;

          for (size_t i = 0; i < b; ++b)
            r += value[i];

          return r;
        }

        // Hypothetical specialized implementation
        A foo<A, 2>() {
          return value[0] + value[1];
        }

        A value[B];
};
33
задан tadman 30 January 2011 в 03:04
поделиться