<div dir="ltr"><font color="#444444">Muchas gracias Steven......es impresionante que siempre estés ahí para echar un cable ( un lujazo ).</font><div><font color="#444444"><br></font></div><div><font color="#444444">Estas dudas no corren prisa, son por ir aprendiendo.<br></font><div><font color="#444444"><br></font></div><div><font color="#444444">Ya consigo que funcione el polimorfismo usando la primera opción, pero aun no puedo usando :<br></font><div><font color="#444444"><br></font></div><div><font color="#444444"> <span style="font-size:12.8000001907349px">typedef map< string, ParentFunctor & > FunctorsMap;</span><br></font></div><div><font color="#444444"><br></font></div><div><font color="#444444">No sé cómo implementar el método insert : </font></div><div><br></div><div><font color="#c27ba0">Me dice que no puede convertir de int a ParentFunctor &</font></div><div><br></div><div><div><font color="#3d85c6">void Functions_Dictionary::insert(const string & id, ParentFunctor * functor)</font></div><div><font color="#3d85c6">{</font></div><div><font color="#3d85c6"><span class="" style="white-space:pre">  </span>if ( ! ( this->functorsMap.insert( pair<string, ParentFunctor &>(id, *functor) ) ).second )</font></div><div><font color="#3d85c6"><span class="" style="white-space:pre">        </span>{</font></div><div><font color="#3d85c6"><span class="" style="white-space:pre">               </span>this->functorsMap[id] = *functor;</font></div><div><font color="#3d85c6"><span class="" style="white-space:pre">    </span>}</font></div><div><font color="#3d85c6">}</font></div></div><div><font color="#6fa8dc"><br></font></div><div><font color="#c27ba0">Y así tampoco va, da el mismo error :</font></div><div><font color="#6fa8dc"><br></font></div><div><div><font color="#3d85c6">void Functions_Dictionary::insert(const string & id, ParentFunctor functor)</font></div><div><font color="#3d85c6">{</font></div><div><font color="#3d85c6"><span class="" style="white-space:pre"> </span>if ( !( this->functorsMap.insert( pair<string, ParentFunctor &>(id, functor) ) ).second )</font></div><div><font color="#3d85c6"><span class="" style="white-space:pre">  </span>{</font></div><div><font color="#3d85c6"><span class="" style="white-space:pre">               </span>this->functorsMap[id] = functor;</font></div><div><font color="#3d85c6"><span class="" style="white-space:pre">     </span>}</font></div><div><font color="#3d85c6">}</font></div></div><div><br></div><div><br></div><div><font color="#444444">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 ???</font></div><div><br></div><div><font color="#c27ba0">ERROR = "error reading characters of string"</font></div><div><br></div><div><div><font color="#3d85c6">struct Print : public ParentFunctor</font></div><div><font color="#3d85c6">{</font></div><div><font color="#3d85c6"><span style="white-space:pre-wrap">        </span>// miembro:</font></div><div><font color="#3d85c6"><span style="white-space:pre-wrap">   </span>string name;</font></div><div><font color="#3d85c6"><br></font></div><div><font color="#3d85c6"><span style="white-space:pre-wrap">      </span>// constructor:</font></div><div><font color="#3d85c6"><span style="white-space:pre-wrap">       </span>Print(const string & _name)</font></div><div><font color="#3d85c6"><span style="white-space:pre-wrap">               </span>: ParentFunctor(), name(_name)</font></div><div><font color="#3d85c6"><span style="white-space:pre-wrap">        </span>{</font></div><div><span style="white-space:pre-wrap"><font color="#3d85c6">             </font></span></div><div><font color="#3d85c6"><span style="white-space:pre-wrap">      </span>}</font></div><div><font color="#3d85c6"><br></font></div><div><font color="#3d85c6"><span style="white-space:pre-wrap"> </span>// función miembro:</font></div><div><font color="#3d85c6"><span style="white-space:pre-wrap">  </span>void operator()()</font></div><div><font color="#3d85c6"><span style="white-space:pre-wrap">     </span>{</font></div><div><font color="#3d85c6"><span style="white-space:pre-wrap">             </span>std::cout << name << std::endl;</font></div><div><font color="#3d85c6"><span style="white-space:pre-wrap">   </span>}</font></div><div><font color="#3d85c6">};</font></div></div></div></div><div><font color="#3d85c6"><br></font></div><div><font color="#444444">Muchas gracias y un super saludos desde Madrid. </font></div><div><font color="#3d85c6"><br></font></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">El 11 de marzo de 2015, 13:56, Davidson, Steven <span dir="ltr"><<a href="mailto:srd4121@njit.edu" target="_blank">srd4121@njit.edu</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hola Miguel Ángel,<div class="gmail_extra"><br></div><div class="gmail_extra">El problema es que no tienes objetos polimórficos. Defines el mapa (o array asociativo) de esta manera,</div><div class="gmail_extra"><br></div><div class="gmail_extra">typedef map < string, ParentFunctor > FunctorsMap;<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Para que exista polimorfismo, necesitas manejar los objetos (polimórficos) a través de punteros o referencias. Lo anterior debería ser,</div><div class="gmail_extra"><br></div><div class="gmail_extra">typedef map< string, ParentFunctor * > FunctorsMap;<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">O si lo prefieres,</div><div class="gmail_extra"><div class="gmail_extra"><br></div><div class="gmail_extra">typedef map< string, ParentFunctor & > FunctorsMap;<br></div><div><br></div><div><br></div><div>Espero haber aclarado la duda.<br></div></div><div class="gmail_extra"><br></div><div class="gmail_extra">Steven</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br><div class="gmail_quote">2015-03-11 3:03 GMT-04:00 Miguel Ángel Torres Fernández-Píñar <span dir="ltr"><<a href="mailto:miguelangeltorresfp@gmail.com" target="_blank">miguelangeltorresfp@gmail.com</a>></span>:<div><div class="h5"><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Hola, buenos días ...<div><br></div><div>Estoy tratando de implementar un sistema ( sencillo ) de registro de funciones.</div><div><br></div><div>Una clase en la que ( usando a modo de diccionario ) podamos registrar cualquier función asociándola con un id ( string ).</div><div><br></div><div>Luego podamos ejecutar cualquier función de las registradas tan solo pasándole el id correspondiente.</div><div><br></div><div>Lo estoy tratando de resolver usando functors.</div><div><br></div><div>Para ello creo un functor padre del que hereden todos los demás, y así pueda hacer uso de polimorfismo.</div><div><br></div><div>El problema es que al final siempre se llama al método sobrecargado ( operator() ) del padre.</div><div><br></div><div>Bueno, les dejo el código por si alguien puede y le apetece echarle un ojo.</div><div><br></div><div>Muchas gracias.</div><div><br></div><div>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.</div></div></blockquote></div></div></div></div></div>
<br>_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div><br></div>