[C con Clase] Buenos días a todos. Problema usando herencia con objetos de tipo "Functor"

Miguel Ángel Torres Fernández-Píñar miguelangeltorresfp en gmail.com
Jue Mar 12 00:59:11 CET 2015


Muchas gracias Steven......es impresionante que siempre estés ahí para
echar un cable ( un lujazo ).

Estas dudas no corren prisa, son por ir aprendiendo.

Ya consigo que funcione el polimorfismo usando la primera opción, pero aun
no puedo usando :

 typedef map< string, ParentFunctor & > FunctorsMap;

No sé cómo implementar el método insert :

Me dice que no puede convertir de int a ParentFunctor &

void Functions_Dictionary::insert(const string & id, ParentFunctor *
functor)
{
if ( ! ( this->functorsMap.insert( pair<string, ParentFunctor &>(id,
*functor) ) ).second )
{
this->functorsMap[id] = *functor;
}
}

Y así tampoco va, da el mismo error :

void Functions_Dictionary::insert(const string & id, ParentFunctor functor)
{
if ( !( this->functorsMap.insert( pair<string, ParentFunctor &>(id,
functor) ) ).second )
{
this->functorsMap[id] = functor;
}
}


Otra duda, por qué cuando paso string como referencia y construyo el
atributo en la lista de inicialización me dice que no puede leer la cadena
???

ERROR = "error reading characters of string"

struct Print : public ParentFunctor
{
// miembro:
string name;

// constructor:
Print(const string & _name)
: ParentFunctor(), name(_name)
{
 }

// función miembro:
void operator()()
{
std::cout << name << std::endl;
}
};

Muchas gracias y un super saludos desde Madrid.



El 11 de marzo de 2015, 13:56, Davidson, Steven <srd4121 en njit.edu> escribió:

> Hola Miguel Ángel,
>
> El problema es que no tienes objetos polimórficos. Defines el mapa (o
> array asociativo) de esta manera,
>
> typedef map < string, ParentFunctor > FunctorsMap;
>
> Para que exista polimorfismo, necesitas manejar los objetos (polimórficos)
> a través de punteros o referencias. Lo anterior debería ser,
>
> typedef map< string, ParentFunctor * > FunctorsMap;
>
> O si lo prefieres,
>
> typedef map< string, ParentFunctor & > FunctorsMap;
>
>
> Espero haber aclarado la duda.
>
> Steven
>
>
>
> 2015-03-11 3:03 GMT-04:00 Miguel Ángel Torres Fernández-Píñar <
> miguelangeltorresfp en gmail.com>:
>
> Hola, buenos días ...
>>
>> Estoy tratando de implementar un sistema ( sencillo ) de registro de
>> funciones.
>>
>> Una clase en la que ( usando a modo de diccionario ) podamos registrar
>> cualquier función asociándola con un id ( string ).
>>
>> Luego podamos ejecutar cualquier función de las registradas tan solo
>> pasándole el id correspondiente.
>>
>> Lo estoy tratando de resolver usando functors.
>>
>> Para ello creo un functor padre del que hereden todos los demás, y así
>> pueda hacer uso de polimorfismo.
>>
>> El problema es que al final siempre se llama al método sobrecargado (
>> operator() ) del padre.
>>
>> Bueno, les dejo el código por si alguien puede y le apetece echarle un
>> ojo.
>>
>> Muchas gracias.
>>
>> PD - he visto también que esto se puede resolver de otras maneras.
>> Cualquier sugerencia es bienvenida, todo esto es para aprender. Por eso me
>> interesa saber en qué me estoy equivocando.
>>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20150312/13f33356/attachment.html>


Más información sobre la lista de distribución Cconclase