1

内部にポインターの std::map を持つ構造体があります。私は次のことをしようとしています:

template <class T>
struct Foo
{
    std::map<std::string, T*> f;
    T& operator[](std::string s)
    {
        return *f[s];
    }
}

そして、次のように使用します。

Foo<Bar> f;
f["key"] = new Bar();

しかし、その書き方では、プログラムがクラッシュします。私もこのように試しました:

T* operator[](std::string s)
{
    return f[s];
}

しかし、コンパイルされません。"lvalue required as left operand of assignment"ライン上で言っていf["key"] = new Bar()ます。

ポインターを返そうとしていて、ポインターを保存しているので、簡単だと思っていました。コードの何が問題になっていますか?

4

1 に答える 1

5

これを行う正しい方法は次のとおりです。

T*& operator[](std::string s)
{
    return f[s];
}

のように呼び出しますf["key"] = new Bar()

編集: const 参照によって非基本型を渡すことを開始する必要があります。

T*& operator[](const std::string& s)
于 2012-02-21T07:50:42.447 に答える