C++仿函数(一)(举例multiplies)

仿函数

  1. 仿函数不是函数,是一个class或者struct
  2. 仿函数重定义操作符()

根据传入的参数个数分为unary_function(1个参数)和 binary_function(2个参数)

multiplies 的定义

// STRUCT TEMPLATE multiplies
template<class _Ty = void>
    struct multiplies
    {   // functor for operator*
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty first_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty second_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty result_type;

    constexpr _Ty operator()(const _Ty& _Left, const _Ty& _Right) const
        {   // apply operator* to operands
        return (_Left * _Right);
        }
    };

使用示例

#include<iostream>
#include<algorithm>
using namespace std;
int main(int argc, char** argv){
    int x = multiplies<int>()(3,4);
    if(not_equal_to<int>()(x,10)){
        cout<<x<<endl;
    }
    return 0;
}

类似的使用

定义的位置:
C++仿函数(一)(举例multiplies)

less greater greater_equal less_equal not_equal_to
logical_and logical_or logical_not
minus plus divide modulus negate

template<class _Ty = void>
    struct plus
    {   // functor for operator+
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty first_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty second_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty result_type;

    constexpr _Ty operator()(const _Ty& _Left, const _Ty& _Right) const
        {   // apply operator+ to operands
        return (_Left + _Right);
        }
    };

        // STRUCT TEMPLATE minus
template<class _Ty = void>
    struct minus
    {   // functor for operator-
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty first_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty second_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty result_type;

    constexpr _Ty operator()(const _Ty& _Left, const _Ty& _Right) const
        {   // apply operator- to operands
        return (_Left - _Right);
        }
    };

        // STRUCT TEMPLATE multiplies
template<class _Ty = void>
    struct multiplies
    {   // functor for operator*
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty first_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty second_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty result_type;

    constexpr _Ty operator()(const _Ty& _Left, const _Ty& _Right) const
        {   // apply operator* to operands
        return (_Left * _Right);
        }
    };

        // STRUCT TEMPLATE equal_to
template<class _Ty = void>
    struct equal_to
    {   // functor for operator==
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty first_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty second_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef bool result_type;

    constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const
        {   // apply operator== to operands
        return (_Left == _Right);
        }
    };

        // STRUCT TEMPLATE not_equal_to
template<class _Ty = void>
    struct not_equal_to
    {   // functor for operator!=
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty first_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty second_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef bool result_type;

    constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const
        {   // apply operator!= to operands
        return (_Left != _Right);
        }
    };

        // STRUCT TEMPLATE greater
template<class _Ty = void>
    struct greater
    {   // functor for operator>
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty first_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty second_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef bool result_type;

    constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const
        {   // apply operator> to operands
        return (_Left > _Right);
        }
    };

        // STRUCT TEMPLATE less
template<class _Ty = void>
    struct less
    {   // functor for operator<
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty first_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty second_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef bool result_type;

    constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const
        {   // apply operator< to operands
        return (_Left < _Right);
        }
    };

        // STRUCT TEMPLATE greater_equal
template<class _Ty = void>
    struct greater_equal
    {   // functor for operator>=
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty first_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty second_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef bool result_type;

    constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const
        {   // apply operator>= to operands
        return (_Left >= _Right);
        }
    };

        // STRUCT TEMPLATE less_equal
template<class _Ty = void>
    struct less_equal
    {   // functor for operator<=
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty first_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty second_argument_type;
    _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef bool result_type;

    constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const
        {   // apply operator<= to operands
        return (_Left <= _Right);
        }
    };

原文链接: https://www.cnblogs.com/cyssmile/p/12790854.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++仿函数(一)(举例multiplies)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/344740

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午2:51
下一篇 2023年3月2日 上午2:51

相关推荐