Я использую это как бездействие для случаев, когда я ожидаю, что функтор не возвращает никакого значения.
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); }
};
Вот вариант C ++ 11 для произвольного числа параметров:
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...);
}
};