<div dir="ltr">Hola Miguel Ángel,<div><br></div><div>En primer lugar, deberías darnos el mensaje del error que te da el compilador, ya que es muy difícil dar una respuesta debida sin información, especialmente al no tener más código fuente. De todas maneras, creo saber el error por la explicación que das: "registrar métodos [...] en un array de punteros a funciones". Esto no es posible. Un puntero a una función miembro no es lo mismo que un puntero a una función (no miembro). O bien usas punteros a funciones miembro o bien usas punteros a funciones, ya sean globales o miembros pero estáticas.</div><div><br></div><div>Una solución es usar functores: objetos de una clase que sirve para encapsular una función. Así puedes crear un array de objetos que comparten la misma interfaz pública e invocar la función miembro por el mismo nombre. Lo más seguro es que te interese polimorfismo, por lo que los objetos son polimórficos dentro de un array. Podrías crear una clase interfaz, por ejemplo,</div><div><br></div><div>class SDLEventHandler<br>{<br>public:<br>  virtual void invoke( const SDL_Event &event ) = 0;</div><div>};</div><div><br></div><div>Y ahora heredamos de esta clase abstracta:<br><br>class window : public ISDLEventHandler</div><div><div>{</div><div>public:</div><div>  virtual void invoke( const SDL_Event &event );<br>  ...</div><div>};</div></div><div><br></div><div><div>class panel : public ISDLEventHandler</div><div>{</div><div>public:</div><div>  virtual void invoke( const SDL_Event &event );</div><div>  ...</div><div>};</div></div><div><br></div><div><div>class commandLineManager : public ISDLEventHandler</div><div>{</div><div>public:</div><div>  virtual void invoke( const SDL_Event &event );</div><div>  ...</div><div>};</div></div><div><br></div><div>Luego creamos el array de "functores":<br><br>std::vector<ISDLEventHandler &> lista_delegados;<br>...<br>window principal;<br>panel p1, p2;<br>commandLineManager clm;</div><div>...</div><div>lista_delegados.push_back( principal );<br>lista_delegados.push_back( p1 );<br>lista_delegados.push_back( p2 );<br>lista_delegados.push_back( clm );<br></div><div><br></div><div>Y cuando se necesite, invocamos la función miembro correcta para gestionar el evento:<br><br>for( int i=0; i<lista_delegados.size(); i++ )<br>  lista_delegados[i].invoke( e );</div><div><br></div><div><br></div><div>Espero que esto te sirva.</div><div><br></div><div>Steven</div><div><br><div class="gmail_extra"><br><div class="gmail_quote">2015-05-18 22:25 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>:<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 a todos.<div><br></div><div>Estoy tratando de registrar métodos de distintas clases en un array de punteros a funciones en una clase manager.<br><div><br></div><div>Defino el tipo de puntero a función y creo un array de punteros a funciones de este tipo :</div><div><br></div><div><font color="#3d85c6">typedef void(*Function_Pointer) (const SDL_Event& event);<br></font></div><div><font color="#3d85c6">typedef std::vector <Function_Pointer> Functions_Array;<br></font></div><div><font color="#3d85c6"><br></font></div><div><font color="#3d85c6">Functions_Array devices_calls;</font><br></div><div><br></div><div>Y luego en otra clase me gustaría poder registrar punteros a funciones en este array.</div></div><div><br></div><div><font color="#3d85c6">void update(const SDL_Event & event);</font><br></div><div><br></div><div>Pero cuando voy a hacer el push_back en el array me da un error que no acierto a entender.</div><div><br></div><div><div><font color="#3d85c6"> devices_calls.push_back(update);</font></div><div><font color="#3d85c6"><br></font></div><div>El array de punteros a funciones lo declaro en una clase "InputManager" e intento registrar el puntero a función desde otra clase, "KeyboardManager".</div><div><font color="#3d85c6"> </font></div></div><div><br></div><div>Gracias y saludos a todos.</div><div><br></div><div>PD - es que los ejemplos que veo por ahí hacen esto pero desde el main y con funciones que no reciben parámetros.</div><div><br></div></div></blockquote></div></div></div></div>