Parcialmente especializando implementações de funções-membro
Atualmente, estou refatorando algum código que especializa explicitamente uma função de membro de um modelo de classe com dois parâmetros de modelo.
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 */ }
Agora eu adicionei mais alguns parâmetros de modelo, então a classe agora fica assim:
template <class S, class EXTRA0, class T, class EXTRA1>
class Foo
{
void bar();
};
Esses dois parâmetros extras apenas adicionam typedefs à minha classe, para que a funcionalidade do tempo de execução não seja alterada. Existe alguma maneira de manter a implementação (agora parcialmente) especializada de bar? Não consigo descobrir a sintaxe para isso e tenho um pressentimento de que talvez não seja possível.
Editar: Estou procurando algo como:
template <class EXTRA0, class EXTRA1>
void foo<SomeType, EXTRA0, Sometype, EXTRA1>::bar()
{
/* specialized implementation */
}
que não parece compilar ..