首頁  >  文章  >  後端開發  >  **如何使用函數物件來實現C內建運算子的功能? ** **

**如何使用函數物件來實現C內建運算子的功能? ** **

DDD
DDD原創
2024-10-26 03:44:27749瀏覽

**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