Does a no-op “do nothing” function object exist in C++(0x)?

后端 未结 4 1553
春和景丽
春和景丽 2021-01-03 20:16

I realize this is a ludicrous question for something that takes less than 2 seconds to implement. But I vaguely remember reading that one was introduced with the new standar

相关标签:
4条回答
  • 2021-01-03 20:21

    You could always write a no-op lambda: []{}

    0 讨论(0)
  • 2021-01-03 20:35

    How about this?

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

    This should work for just about any use.

    0 讨论(0)
  • 2021-01-03 20:35

    You was probably thinking about the identity function (std::identity and apparently it's removed in the current draft) that is not the same thing though.

    0 讨论(0)
  • 2021-01-03 20:37

    I use this as a drop-in no-op for cases where I expect a functor that does not return any value.

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

    Here is a C++11 variation for arbitrary numbers of parameters:

    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...);
        }
    };
    
    0 讨论(0)
提交回复
热议问题