Ответ 1
Вы всегда можете написать no-op лямбда: []{}
Я понимаю, что это смехотворный вопрос для чего-то, что требуется менее 2 секунд. Но я смутно помню, как читал, что один был введен с новым стандартом.
Я загорелся заголовками VC10 и ничего не придумал. Вы можете помочь? Это меня било!:)
изменить
С другой стороны, новый функтор, о котором я помнил, вероятно, был несвязанным std::default_deleter
.
Вы всегда можете написать no-op лямбда: []{}
Как насчет этого?
// 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 (...)
{
}
};
Это должно работать практически для любого использования.
Вероятно, вы думали о функции идентификации (std:: identity и, по-видимому, удалены в текущем черновике), но это не одно и то же.
Я использую это как drop-in no-op для случаев, когда ожидаю функтора, который не возвращает никакого значения.
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); }
};
Вот вариант С++ 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...);
}
};