Rumah  >  Artikel  >  pembangunan bahagian belakang  >  ## Bolehkah Anda Mendapatkan Penunjuk Fungsi kepada Operator Terbina Dalam C?

## Bolehkah Anda Mendapatkan Penunjuk Fungsi kepada Operator Terbina Dalam C?

Patricia Arquette
Patricia Arquetteasal
2024-10-25 11:52:30116semak imbas

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

Adakah mungkin untuk mendapatkan penunjuk fungsi pengendali standard terbina dalam?

Cabaran

Untuk menggunakan penunjuk fungsi untuk merujuk terbina- dalam pengendali seperti pengendali "lebih besar daripada" (">") dalam kelas templat, adalah perlu untuk menentukan lebihan jenis yang betul. Walau bagaimanapun, ini boleh mencabar.

Mengapa Operator Terbina Dalam Tidak Boleh Menjadi Penunjuk Fungsi

Operator terbina dalam C, seperti operator aritmetik dan logik, bukanlah fungsi operator sebenar. Sebaliknya, ia secara langsung diterjemahkan ke dalam arahan pemasangan oleh pengkompil. Oleh itu, adalah tidak mungkin untuk mendapatkan penunjuk fungsi untuk mereka.

Objek Fungsi sebagai Alternatif

Objek fungsi, yang ditakrifkan dalam standard C, menyediakan cara untuk bekerja dengan operasi yang berkelakuan seperti penunjuk fungsi tetapi bukan fungsi sebenar. Ia adalah objek templat yang mereput kepada operator analog dalam fungsi operator() mereka.

Sebagai contoh, objek fungsi std::greater mewakili operator yang lebih besar (">"). Ia boleh digunakan sebagai hujah penuding fungsi dalam kelas templat.

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

Operator Jenis Kelas Standard

Walaupun penunjuk fungsi tidak boleh digunakan secara langsung dengan operator terbina dalam, mereka boleh digunakan dengan pengendali perpustakaan standard yang dilaksanakan sebagai fungsi sebenar. Walau bagaimanapun, adalah perlu untuk membuat instantiate contoh khusus kelas templat untuk pengendali dan pengkompil mungkin memerlukan pembayang untuk menyimpulkan hujah templat dengan betul.

Atas ialah kandungan terperinci ## Bolehkah Anda Mendapatkan Penunjuk Fungsi kepada Operator Terbina Dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn