複数の引数を使用した C の配列演算子のオーバーロード
C では、配列演算子 [] を使用して配列にアクセスできます。これは通常、引数として単一のインデックスを指定します。ただし、シナリオによっては、複数のインデックスを使用して配列にアクセスする必要がある場合があります。複数の引数を受け取るように配列演算子をオーバーロードすることは可能ですか?
提供されたコード スニペットは、3 つの引数を受け入れるように配列演算子をオーバーロードしようとしますが、「バイナリ演算子 '[' にはパラメータが多すぎます」というエラーが表示されて失敗します。 ."
C 23 より前
C 23 より前はそうではありませんでした複数の引数を受け入れるために配列演算子をオーバーロードすることが可能です。回避策は、代わりにoperator()をオーバーロードすることでした。適切なプロトタイプを使用して関数を作成すると、複数の引数を持つ配列演算子の動作をシミュレートできます。
C 23 以降
C 23 の出現により、複数の添字引数を配列演算子に直接渡すことができます。この機能により、コードが簡素化され、特に多次元配列を操作する場合の読みやすさが向上します。
たとえば、次のコード スニペットを考えてみましょう。
struct MultiDimArray { std::vector<int> m_cells; int m_res; int m_resSqr; const T& operator[](const int i, const int j, const int k) const { return m_cells[k*m_resSqr + j*m_res + i]; } T& operator[](const int i, const int j, const int k) { return m_cells[k*m_resSqr + j*m_res + i]; } };
このコードでは、配列演算子がオーバーロードされています。 3 つの引数を取ります。これにより、プログラマは追加の関数や回避策を必要とせずに、複数のインデックスを使用して配列にアクセスできるようになります。
以上がC の配列演算子を複数の引数でオーバーロードできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。