Especialización de plantillas de la clase de plantillas.

Quiero especializarme en la siguiente función miembro:

class foo {
    template<typename T>
    T get() const;
};

A otra clasebar Eso también depende de las plantillas.

Por ejemplo, me gustaríabar serstd::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 plantillas también. ¿Cómo se puede hacer esto? Por lo que sé, debería ser posible.

Así que ahora puedo llamar:

some_foo.get<std::pair<int,double> >();

La respuesta completa / final:

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);
        }
};

Respuestas a la pregunta(2)

Su respuesta a la pregunta