我有一个带有std ::指针映射的结构。我正在尝试执行以下操作:
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()
。
我希望它很简单,因为我正在尝试返回一个指针并且我正在存储一个指针。我的代码出了什么问题?
答案 0 :(得分:5)
这样做的正确方法是:
T*& operator[](std::string s)
{
return f[s];
}
并将其称为f["key"] = new Bar()
。
编辑:你应该开始通过const引用传递非基本类型,你可以:
T*& operator[](const std::string& s)