Buenas,
Tengo una duda que puede ser un tanto compleja  

  y que espero que alguien sea capaz de resolverme. Tengo una clase cuyo "pseudocodigo" podría ser:
class Collection
{
   std::map<char *, void *> elements;
   Collection();
   ~Collection();   
   void addElement( char * name, void * value )
   {
   }   
   int getValue( char * name )
   {
   }
   double getValue( char * name )
   {
   }
}
Ok, el "mapa" de la clase puede almacenar objetos de diferente tipo puesto que almacena punteros a void. Ahora imaginad que yo sé dentro de la clase Collection qué tipo tiene cada objeto almacenado. Lo que me gustaría saber es cómo puedo llamar desde fuera a un método "getValue" que ya me devuelva el tipo correcto... No sé si me he explicado...  
 Gracias por adelantado.