ホームページ >バックエンド開発 >C++ >## 組み込みの C 演算子の関数ポインターを取得できますか?

## 組み込みの C 演算子の関数ポインターを取得できますか?

DDD
DDDオリジナル
2024-10-25 10:20:30658ブラウズ

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

組み込み標準演算子の関数ポインタを取得することは可能ですか?

はじめに

関数ポインタは、特定の関数を参照する方法を提供します。演算子関数。ただし、組み込みの標準演算子の場合、このアプローチは簡単ではない可能性があります。この記事では、この制限の背後にある理由を詳しく掘り下げ、同様の機能を実現するための代替ソリューションを検討します。

組み込み演算子で関数ポインターが使用できない理由

C 標準 (13.6/) 1) の場合、組み込み演算子は通常の演算子関数ではないため、組み込み演算子を指す関数ポインターを持つことができません。これらは他の目的を果たさず、オーバーロードの解決にのみ参加します。

代替: 関数オブジェクトの使用

この制限を克服するために、C 標準では関数オブジェクトが導入され、組み込みオブジェクトと同様の機能が提供されます。テンプレート化されたオブジェクトを介した演算子。たとえば、比較の場合、equal_to、greater、less_equal などの関数オブジェクトが定義されます。これらのオブジェクトは、関数ポインターの引数として使用できます。

提供されたコード スニペットの目的は、テンプレート クラス内の 2 つの整数を比較することです。関数オブジェクト手法を使用すると、次のように実現できます。

<code class="cpp">class MyAction {
  bool operator()() {
    if (fnCompare_(arg0_, arg1_)) {
      // do this
    } else {
      // do s.th. else
    }
  }
};</code>

ここで、fnCompare_ は std::equal_to のような関数オブジェクトにすることができます。

標準クラス型演算子

関数オブジェクトに加えて、標準ライブラリ演算子も関数ポインターとして使用できます。ただし、テンプレートのそれぞれのインスタンスを参照する必要があります。例:

<code class="cpp">std::basic_string<char> a("test"), b("test2");
std::cout << test_function<std::basic_string<char>>(a, b, &std::operator+);</code>

結論

関数ポインターは組み込みの標準演算子では直接使用できませんが、関数オブジェクトと標準クラス型演算子によって提供される代替ソリューションにより同等の機能が可能になります。これらの代替により、特定の標準演算子を関数ポインターとして使用できるようになり、組み込み演算子によってもたらされる制限に対処できます。

以上が## 組み込みの C 演算子の関数ポインターを取得できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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