25

これは、実装に2秒もかからないものに対するばかげた質問だと思います。しかし、私は漠然と、新しい標準が導入されたことを読んだことを覚えています。

私はVC10のヘッダーをgrepして、何も思いつきませんでした。手伝ってくれますか?それは私を悩ませています!:)

編集: 考え直して、私が覚えていた新しいファンクターはおそらく無関係std::default_deleterでした。

4

4 に答える 4

30

いつでもno-opラムダを書くことができます:[]{}

于 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 に答える