¿Sabría si hay una forma de pasar argumentos usando std :: mem_fun? Quiero precisar que puedo tener tantos argumentos como sea posible y muchas funciones miembro.
El problema es que estoy en un estándar antiguo y estoy buscando una forma completa stl así que no estoy permitido como respuesta incluso si sé que podría hacerlo fácilmente =/Cómo pasar argumentos usando std :: mem_fun
Aquí hay un poco ilustración de cómo quiero usarlo:
#include <list>
#include <algorithm>
// Class declaration
//
struct Interface {
virtual void run() = 0;
virtual void do_something(int) = 0;
virtual void do_func(int, int) = 0;
};
struct A : public Interface {
void run() { cout << "Class A : run" << endl; }
void do_something(int foo) { cout << "Class A : " << foo << endl; }
void do_func(int foo, int bar) { cout << "Class A : " << foo << " " << bar << endl; }
};
struct B : public Interface {
void run() { cout << "Class B : run" << endl; }
void do_something(int foo) { cout << "Class B : " << foo << endl; }
void do_func(int foo, int bar) { cout << "Class B : " << foo << " " << bar << endl; }
};
// Main
//
int main() {
// Create A and B
A a;
B b;
// Insert it inside a list
std::list<Interface *> list;
list.push_back(&a);
list.push_back(&b);
// This works
std::for_each(list.begin(), list.end(), std::mem_fun(&Interface::run));
// But how to give arguments for those member funcs ?
std::for_each(list.begin(), list.end(), std::mem_fun(&Interface::do_something));
std::for_each(list.begin(), list.end(), std::mem_fun(&Interface::do_func));
return 0;
}
Gracias por su respuesta, ¿puede poner un ejemplo de cómo usarlo ? No puedo hacer que funcione .. – klefevre
Supongo que podría, pero 1) @LokiAstari ya lo tiene, así que no agregaría mucho, y 2) Nunca los uso. Hace mucho tiempo decidí que no valían la pena. En la (sorprendentemente rara) situación en la que necesito ese tipo de cosas, escribo una pequeña clase de functor para manejarlo. Afortunadamente, en C++ 11, es fácil eliminar eso también. –
Gracias de todos modos. – klefevre