Whew, 这是一项长期的工作。
这里我的问题。 我在C++和Im超载[]运营商的舱面上翻了一番模板。 我的版本既简明,也非最接近,不定的版本以提及方式返回,从而可以更改类别中的项目:
myobject[1] = myvalue;
直到我使用ean作为模板参数。 这里有一个充分的例子显示错误:
#include <string>
#include <vector>
using namespace std;
template <class T>
class MyClass
{
private:
vector<T> _items;
public:
void add(T item)
{
_items.push_back(item);
}
const T operator[](int idx) const
{
return _items[idx];
}
T& operator[](int idx)
{
return _items[idx];
}
};
int main(int argc, char** argv)
{
MyClass<string> Test1; // Works
Test1.add("hi");
Test1.add("how are");
Test1[1] = "you?";
MyClass<int> Test2; // Also works
Test2.add(1);
Test2.add(2);
Test2[1] = 3;
MyClass<bool> Test3; // Works up until...
Test3.add(true);
Test3.add(true);
Test3[1] = false; // ...this point. :(
return 0;
}
错误是汇编错误,信息是:
error: invalid initialization of non-const reference of type ‘bool&’ from a temporary of type ‘std::_Bit_reference’
我读过并发现,STL使用了一些临时数据类型,但我不理解为什么它除包裹外一切照相。
在这方面的任何帮助都值得赞赏。