Obtenga el tipo de parámetro, plantillas, C ++

Existe la siguiente estructura de datos simplificada:

Object1.h

template <class T>
class Object1
{
  private:
     T a1;
     T a2;
  public:
     T getA1() {return a1;}
};

Object2.h

template <class T>
class Object2: public Object1 <T>
{
   private:
      T b1;
      T b2;
  public:
     T getB1() {return b1;}
}

¿Hay alguna forma de obtener el tipo T de un objeto en la siguiente función:

Functions.h

template <class Object>
void (Object *o1, Object *o2)
{
   T = o1.getA1();  //Is it possible to get T from object o1?
   ...
}

o debemos proporcionar información adicional sobre los tipos de datos de ambos objetos:

template <class T, class Object>
void (Object *o1, Object *o2)
{
   T = o1.getA1();
   ...
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta