¿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...);
}
};