Есть ли простой способ для определения частичной специализации класса шаблонов С++ с учетом числовой константы для одного из параметров шаблона? Я пытаюсь создать специальные конструкторы только для определенных типов комбинаций шаблонов:
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; };
};
Этот пример не будет компилироваться, возвращая ошибку Expected identifier before numeric constant
во втором определении.
Я рассмотрел ряд примеров здесь и в других местах, но большинство, похоже, вращается вокруг специализации с типом, а не с константой.
Edit:
Ищете способ написать условно используемый конструктор, что-то функционально подобное:
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];
};