C では、組み込み演算子には真の関数ポインタに相当するものが存在せず、オーバーロードの解決を超えた役割を果たします。これに対処するために、標準では、組み込み演算子の動作を反映する関数オブジェクトが定義されています。
標準では、算術演算と比較演算をカプセル化する関数オブジェクトが提供されています。として:
これらのオブジェクトは、対応する演算子と同等の機能を提供し、関数ポインタの引数として使用できます。
特定の標準ライブラリ演算子では、関数ポインタを使用できます。ただし、これには、関連するオブジェクトのテンプレート タイプを指定する必要があります。たとえば、std::basic_string の演算子を使用するには、次のように実装できます。
<code class="cpp">template<class Test> Test test_function (Test const &a, Test const &b, Test (*FPtr)(Test const &, Test const &)) { 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 サイトの他の関連記事を参照してください。