首頁  >  文章  >  後端開發  >  ## 您可以獲得指向 C 內建運算子的函數指標嗎?

## 您可以獲得指向 C 內建運算子的函數指標嗎?

Patricia Arquette
Patricia Arquette原創
2024-10-25 11:52:30116瀏覽

## Can You Get Function Pointers to C   Built-in Operators?

是否可以取得內建標準運算子的函數指標?

挑戰

使用函數指標來引用內建 -在範本類別中的「大於」運算子(「>」)等運算子中,有必要指定正確的類型重載。然而,這可能具有挑戰性。

為什麼內建運算子不能是函數指標

C 內建運算符,例如算術運算符和邏輯運算符,不是真正的運算子函數。相反,它們被編譯器直接翻譯成彙編指令。因此,不可能取得它們的函數指標。

作為替代方案的函數物件

C 標準中定義的函數物件提供了一種處理類似於函數指標的操作的方法但不是實際的功能。它們是模板化對象,在其operator()函數中衰減為類似的運算子。

例如,std::greater函數物件表示大於運算子(“>”)。它可以用作模板類別中的函數指標參數。

<code class="cpp">template<typename ParamsType, typename FnCompareType>
class MyAction
{
public:
    MyAction(ParamsType& arg0, ParamsType& arg1, FnCompareType& fnCpmpare) 
    : 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_;
}</code>
<code class="cpp">void doConditional(int param1, int param2)
{
    MyAction<int, std::greater<int>> action(param1, param2);
    if(action())
    {
        // Do this
    }
    else
    {
        // Do that
    }
}</code>

標準類別運算子

雖然函數指標不能直接與內建運算子一起使用,但它們可以與實際函數實作的標準函式庫運算子一起使用。但是,需要為運算子實例化模板類別的特定實例,並且編譯器可能需要提示才能正確推導模板參數。

以上是## 您可以獲得指向 C 內建運算子的函數指標嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn