que quieran especializarse siguiente función miembro:plantilla de especialización de clase de plantilla
class foo {
template<typename T>
T get() const;
};
Para otra clase bar
que depende de las plantillas también.
Por ejemplo, me gustaría ser bar
std::pair
con algunos parámetros de plantilla, algo así:
template<>
std::pair<T1,T2> foo::get() const
{
T1 x=...;
T2 y=...;
return std::pair<T1,T2>(x,y);
}
Donde T1 y T2 son las plantillas también. ¿Cómo puede hacerse esto? Por lo que sé, debería ser posible.
Así que ahora puedo llamar:
some_foo.get<std::pair<int,double> >();
La respuesta final completo /:
template<typename T> struct traits;
class foo {
template<typename T>
T get() const
{
return traits<T>::get(*this);
}
};
template<typename T>
struct traits {
static T get(foo &f)
{
return f.get<T>();
}
};
template<typename T1,typename T2>
struct traits<std::pair<T1,T2> > {
static std::pair<T1,T2> get(foo &f)
{
T1 x=...;
T2 y=...;
return std::make_pair(x,y);
}
};
No está claro lo que quieres decir. ¿Desea una especialización que se aplique siempre que T1 y T2 sean plantillas? ¿O cuando son una plantilla específica? ¿O cuando son plantillas y su parámetro es de algún tipo específico? – jalf
Quiero decir, que quiero especializar mi función para otro tipo específico (como std :: pair) que también necesita algunos parámetros de plantilla. – Artyom
Compruebe esto: http://stackoverflow.com/questions/947943/template-specialisation-where-templated-type-is-also-a-template –