yo sólo me encontré crear una clase¿Estoy reinventando la rueda con este método trivial llamada clase de reenvío?
template <typename T> struct invoker {
void operator()(T& it) const {it();}
};
para que pudiera pasar una invoker<foo>
a algo (que no está bajo mi control), que quiere llamar invoker<foo>::operator()(foo&)
en él en varias ocasiones con diferentes foo
casos, para conseguir que se reenviar esas llamadas al método foo
foo::operator()()
.
Sé que son solo unas pocas líneas, pero esto parece ser el tipo de cosa que probablemente ya está prevista por el funcional de STL, o boost::bind
de alguna manera. Excepto que no puedo ver el truco, si es que hay uno. (Estoy seguro de que no soy la primera persona en usar algo muy parecido a esto: ¿tiene un nombre?)
creo que C++ 11 tiene algo para esto también – pyCthon
Por ahora estoy en g ++ 4.4.5; No creo que g ++ haya obtenido lambdas hasta 4.5. Curioso de ver una solución lambda si uno está publicado; Puedo vivir con mi clase de invoker hasta una actualización de la versión de g ++. – timday
¿Por qué no llamarías 'foo :: operator()' directamente? Quiero decir, la clase que llama a 'invoker :: operator()' tiene que hacer algo como 'some_invoker (some_foo);', mientras que podría llamarlo así: 'some_foo();'. Está agregando una capa innecesaria de indirección. – mfontanini