Подтвердить что ты не робот

В С++ (0x) существует объект функции no-op "ничего не делать"?

Я понимаю, что это смехотворный вопрос для чего-то, что требуется менее 2 секунд. Но я смутно помню, как читал, что один был введен с новым стандартом.

Я загорелся заголовками VC10 и ничего не придумал. Вы можете помочь? Это меня било!:)

изменить С другой стороны, новый функтор, о котором я помнил, вероятно, был несвязанным std::default_deleter.

4b9b3361

Ответ 1

Вы всегда можете написать no-op лямбда: []{}

Ответ 2

Как насчет этого?

// 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 (...)
  {
  }
};

Это должно работать практически для любого использования.

Ответ 3

Вероятно, вы думали о функции идентификации (std:: identity и, по-видимому, удалены в текущем черновике), но это не одно и то же.

Ответ 4

Я использую это как 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...);
    }
};