C で複数の引数を使用して `operator[]` をオーバーロードするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-20 02:40:02
オリジナル
150 人が閲覧しました

C で複数の引数を持つ

How Can I Overload the `operator[]` with Multiple Arguments in C  ?

Operator[]

C で複数の引数を取る配列演算子を定義しようとすると、問題が発生する可能性があります。次の構文を使用すると、

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];
}
ログイン後にコピー

エラー メッセージが表示されます:

error C2804: binary operator '[' has too many parameters
ログイン後にコピー

回避策 (Pre-C 23)

以前C 23 では、複数の引数を使用して Operator[] をオーバーロードすることはできませんでした。代わりに、operator() をオーバーロードできます。

Resolution (C 23)

ただし、C 23 以降では、operator[] を直接オーバーロードできます。これは、以下の cppreference の例で示されています:

struct V3
{
    double x, y, z;

    constexpr V3 operator[](int i) const {
        return { x, y, z }[i];
    }

    // Alternatively, using std::initializer_list:
    friend constexpr std::initializer_list<double> operator()(const V3& v) {
        return { v.x, v.y, v.z };
    }
};
ログイン後にコピー

以上がC で複数の引数を使用して `operator[]` をオーバーロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート