Вы можете создать базовый класс, в котором вы можете определить всех своих членов, кроме bar (), а затем создать производные классы (один для общего назначения, другой для SomeType):

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

template <class S, class T>
class Foo
{
  void bar();
};

template <class S, class T>
void Foo<S, T>::bar()
{ /* Generic stuff */ }

template <>
void Foo<SomeType, SomeType>::bar()
{ /* Some special function */ }

Теперь я добавил еще несколько параметров шаблона, поэтому класс теперь выглядит так:

template <class S, class EXTRA0, class T, class EXTRA1>
class Foo
{
  void bar();
};

Эти два дополнительных параметра просто добавляют typedefs в мой класс, поэтому функциональность во время выполнения не меняется. Есть ли способ сохранить (теперь частично) специализированную реализацию бара? Я не могу понять синтаксис для этого, и у меня есть догадка, что это может быть невозможно.

Редактировать: Я ищу что-то вроде:

template <class EXTRA0, class EXTRA1>
void foo<SomeType, EXTRA0, Sometype, EXTRA1>::bar()
{
   /* specialized implementation */
}

который, кажется, не компилируется ..

Ответы на вопрос(4)

Ваш ответ на вопрос