ホームページ  >  記事  >  バックエンド開発  >  **関数オブジェクトを使用して 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。