C ++(0x)中是否存在无操作“无用”功能对象?

时间:2010-06-05 23:52:31

标签: c++ c++11 functional-programming noop

我意识到这对于实施时间不到2秒的事情来说是一个荒谬的问题。但我依稀记得读过新标准引入的那个。

我grep'ed VC10的标题,什么都没有。你能帮我吗?这让我烦恼! :)

修改 第二个想法,我记得的新仿函数可能是不相关的std::default_deleter

4 个答案:

答案 0 :(得分:26)

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

答案 1 :(得分: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 (...)
  {
  }
};

这应该适用于任何用途。

答案 2 :(得分:0)

我将此作为一个插入式无操作用于我期望一个没有返回任何值的仿函数的情况。

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

答案 3 :(得分:-1)

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