首页 >后端开发 >C++ >**如何使用函数对象来实现C中内置运算符的功能?**

**如何使用函数对象来实现C中内置运算符的功能?**

DDD
DDD原创
2024-10-26 03:44:27837浏览

**How can you use function objects to achieve the functionality of built-in operators in C  ?**

获取指向内置运算符的函数指针

运算符指针限制

在 C 中,内置运算符缺乏真正的函数指针对应项,并且不存在发挥超出过载解决方案的作用。为了解决这个问题,该标准定义了反映内置运算符行为的函数对象。

用于算术和比较的函数对象

该标准提供了函数对象来封装算术和比较操作,例如如:

  • 等于
  • 不_等于
  • 大于、小于
  • 大于_等于
  • 小于_等于

这些对象提供与其相应运算符相同的功能,并且可以用作函数指针参数。

标准库类运算符

某些标准库运算符允许使用函数指针。然而,这需要指定所涉及对象的模板类型。例如,要使用 std::basic_string 中的运算符,可以实现以下内容:

<code class="cpp">template<class Test>
Test test_function (Test const &amp;a, Test const &amp;b, Test (*FPtr)(Test const &amp;, Test const &amp;))
{
   return FPtr(a, b);
}</code>

实现示例

以下代码演示了使用函数对象进行比较操作:

<code class="cpp">template<typename ParamsType, typename FnCompareType>
class MyAction
{
  public:
    MyAction(ParamsType& arg0, ParamsType& arg1, FnCompareType& fnCompare) 
    : arg0_(arg0), arg1_(arg1), fnCompare_(fnCompare) {}

    bool operator()()
    {
        if((*fnCompare_)(arg0_,arg1_))
        {
            // do this
        }
        else
        {
            // do s.th. else
        }
    }

  private:
    ParamsType& arg0_;
    ParamsType& arg1_;
    FnCompareType& fnCompare_;
};

void doConditional(int param1, int param2)
{
    MyAction<int, std::equal_to<int>> action(param1,param2);
    if(action())
    {
        // Do this
    }
    else
    {
        // Do that
    }
}</code>

以上是**如何使用函数对象来实现C中内置运算符的功能?**的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn