He estado aprendiendo D, y estoy particularmente emocionado por sus capacidades de programación genérica. Los delegados son maravillosos, y al parecer se han sustituido por completo miembros de la función triples, por lo que me he quedado atrapado cuando quería implementar algo como lo siguiente:D Analógico a C++ member-function-pointers, no necesariamente delegados
template <typename T>
void DispatchMethodForAll(std::vector<T*> & container, void (T::* func)(void))
{
for(typename std::vector<T*>::iterator it = container.begin(); it != container.end(); ++it)
(*it)->*func();
}
De acuerdo con lo que he aprendido de los punteros de función y delegados en Re , es que ninguno de ellos puede hacer esto, ya que los punteros de funciones solo pueden declararse para funciones globales, y los delegados tienen que estar vinculados a un objeto, no hay un "delegado parcial" que pueda encontrar. Como se ve aquí, no puedo usar un delegado, ya que no hay un único objeto que pueda vincularse al método que se va a llamar.
Sé que yo podría hacerlo con mixins, y esencialmente hacerlo una macro. Sin embargo, esto realmente no suena como D, y pensé que debería haber "La forma correcta"
¿Necesita esta selección de miembros dinámicos a suceder en tiempo de compilación o debe ser capaz de suceder en tiempo de ejecución? – Mehrdad
Para este caso particular podría ser en tiempo de compilación, pero también tengo curiosidad por ver qué solución para el tiempo de ejecución sería –