c++ c++11 functional-programming noop

¿Existe un objeto de función de "no hacer nada" no operativo en C++(0x)?



c++11 functional-programming (4)

Me doy cuenta de que esta es una pregunta absurda para algo que tarda menos de 2 segundos en implementarse. Pero recuerdo vagamente haber leído que uno se introdujo con el nuevo estándar.

Grepé los encabezados de VC10 y no encontré nada. ¿Puede usted ayudar? ¡Me está molestando! :)

edición: Pensándolo bien, el nuevo functor que estaba recordando era probablemente el std::default_deleter no relacionado.


¿Qué tal esto?

// Return a noop function template <typename T> struct noop { T return_val; noop (T retval = T ()) : return_val (retval) { } T operator (...) { return return_val; } }; template <> struct noop<void> { void operator (...) { } };

Esto debería funcionar para casi cualquier uso.


Probablemente estaba pensando en la función de identidad (std :: identidad y aparentemente se eliminó en el borrador actual), aunque no es lo mismo.


Siempre se puede escribir un lambda no-op: []{}


Utilizo esto como un drop-in no-op para los casos en los que espero un functor que no devuelve ningún valor.

struct VoidNoOp { void operator()() const { } template<class A> void operator()(A a) const { (void)(a); } template<class A, class B> void operator()(A a, B b) const { (void)(a); (void)(b); } template<class A, class B, class C> void operator()(A a, B b, C c) const { (void)(a); (void)(b); (void)(c); } };

Aquí hay una variación de C ++ 11 para números arbitrarios de parámetros:

struct VoidNoOp { void operator()() const { }; template<typename P1, typename... Params> void operator()(P1 p1, Params... parameters) { (void)(p1); // we do this just to remove warnings -- requires the recursion operator()(parameters...); } };