std::enable_if второй запрос

Я новичок в std::enable_if и мне интересно, как его использовать. У меня есть класс шаблона:

template<int a, int b>
class foo {
  int c;
}

Я хочу, чтобы в шаблоне был только элемент c, когда

a = 5. 

Как мне это сделать с помощью std::enable_if? Это правильный случай использования std::enable_if?


person WhatABeautifulWorld    schedule 08.11.2012    source источник
comment
Чем это отличается от вашего первого вопроса? То есть, почему вы не можете использовать технику, предложенную в принятом ответе, и для этого примера?   -  person jogojapan    schedule 08.11.2012
comment
Первый касается соблюдения правил a+b. Это касается включения c на основе некоторых правил о a   -  person WhatABeautifulWorld    schedule 09.11.2012


Ответы (1)


Вы можете использовать частичную специализацию. Нет необходимости в std::enable_if.

//primary template
template<int a, int b>
class foo 
{
      //whatever 
};

//partial specialization
template<int b>
class foo<5,b>  //when a = 5, this specialization will be used!
{
  int c;  //it has member c
};

Применение:

foo<1,3>  f1; //primary template is used
foo<5,3>  f2; //partial specialization is used
person Nawaz    schedule 08.11.2012
comment
@WhatABeautifulWorld: Тогда задай вопрос правильно. Дайте больше информации в вопросе. Кроме того, вы можете попробовать использовать шаблон базового общего класса, если это поможет. - person Nawaz; 08.11.2012