Задать вопрос
ElleSolomina
@ElleSolomina
HedgehogInTheCPP

Возможно ли полное выключение части кода метода шаблонного класса на С++?

Доброго времени суток.


Разрабатываю на С++ довольно давно, особых проблем не испытываю, но вот столкнулся с задачей, которую не понимаю как решить, хотя она должна решаться легко. Подскажите пожалуйста есть ли какой то способ полностью отключить генерацию определённого участка кода в функции шаблона (так, как это было бы при применении препроцессора). Пример:

template <classT, bool alt = false>
Shablon
{

  void foo()
  {
      if (alt)
      {
         ((T*)this)->m_member.foo(); // ошибка компиляции если alt == false, и у класса T нет члена с методом foo.
         ((T*)this)->someFoo();
      }
      ((T*)this)->someFoo2();
  }

}
  • Вопрос задан
  • 4206 просмотров
Подписаться 5 Оценить Комментировать
Ответ пользователя sdevalex К ответам на вопрос (7)
sdevalex
@sdevalex
template <int v>
struct Int2Type
{
        enum { value = v };
};

template <classT, bool alt = false>
class Shablon
{
  void doSomething(Int2Type<true>)
  {
     ((T*)this)->m_member.foo();
     ((T*)this)->someFoo();
  }

  void doSomething(Int2Type<false>)
  {
  }

  void foo()
  {
      DoSomething(alt);

      ((T*)this)->someFoo2();
  }
};
Ответ написан