¿Hay alguna forma de especializar una plantilla como esta, por lo que la especialización se aplica solo si T tiene una función miembro hash
? (Tenga en cuenta que esto es solo un ejemplo de lo que estoy tratando de hacer. Sé que tendría más sentido para cada clase que tiene una función hash
comprobarlo solo en la función de miembro operator==
, pero solo quiero saber si este tipo de cosas es posible.)¿Hay alguna forma de especializar una plantilla basada en los miembros de un parámetro en C++?
template <class T>
bool equals(const T &x, const T &y)
{
return x == y;
}
template <class T> // somehow check if T has a member function 'hash'
bool equals<T>(const T &x, const T &y)
{
return x.hash() == y.hash() && x == y;
}
Preferiría una solución pre-C++ 11 si es posible.
Puede usar conceptos con el concepto de compilador experimentalGCC, pero eso no será el estándar C++ antes de unos años. – Morwenn