1

基本的に、私は c++ 用のテンプレート マップ/辞書クラスを作成しようとしています (これは既に行われていることを知っています。私は自虐的であると仮定します)。

私はこのスケルトンを書き始めました:

#pragma once
template <class T>
class AssArray
{
    int _size;
    int _position;

public:
    AssArray(int size);
    ~AssArray(void);

    const T& operator [](char* b) const;
    T& operator [](char* b) const;
        //I read this should be done sth like this when researching, though an explanation would be nice.
};

ここで、(T=AssArray["llama"]) を取得し、(AssArray["llama"]= T) を設定し、(AssArray["llama"]= newT) をオーバーライドできるようにする必要があります。

これを行うのは非常に簡単です。ループするだけです。ここでの本当の問題は演算子です。

AssArray["llama"]= T を使用する場合、T の値を演算子のオーバーロード関数に取得するにはどうすればよいですか?

解決策を簡単に説明している説明を見つけただけで、実際には従うことができません。
教えてください。

4

2 に答える 2

1

次のように署名を修正するだけです。

const T& operator [](char* b) const;
T& operator [](char* b);

const2 番目の演算子から修飾子を削除しました。

を使用するAssArray["llama"]=T場合、T の値を演算子オーバーロード関数に取得するにはどうすればよいですか?

あなたはそうしない。新しい値を格納する場所への参照を返すだけで、あとはコンパイラが処理します。"llama"が配列に存在しない場合は、そのエントリを作成し、そのエントリへの参照を返す必要があります。

于 2013-02-12T20:17:22.710 に答える
0

assArray["str"] = T と言いたい場合、operator[] は T への参照を返すため、型 T は operator= をどう処理するかを知る必要があります。T に operator= がオーバーロードされていない場合は、T 型で operator= をオーバーロードする必要があります。

operator[] は割り当てとは関係ありません。指定されたインデックスの要素を返すだけです。

于 2013-02-12T20:29:29.010 に答える