25

我意识到这是一个可笑的问题,因为它需要不到 2 秒的时间来实现。但我依稀记得读过新标准引入了一个。

我 grep 了 VC10 的标头,但一无所获。你能帮我吗?烦死我了!:)

编辑: 再想一想,我记得的新仿函数可能是不相关的std::default_deleter.

4

4 回答 4

30

你总是可以写一个无操作的 lambda:[]{}

于 2010-06-05T23:55:09.643 回答
1

在我期望函子不返回任何值的情况下,我将其用作插入式无操作。

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...);
    }
};
于 2014-09-09T15:37:55.290 回答
0

这个怎么样?

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

这应该适用于几乎任何用途。

于 2010-09-08T18:38:28.563 回答
-1

您可能正在考虑身份函数(std::identity,显然它已在当前草案中删除),但这不是一回事。

于 2010-06-06T08:34:15.703 回答