哎,這是一個長的標題。重載[]運算符在C++模板類與const/nonconst版本
這是我的問題。我有一個C++的模板類,並且我重載了[]運算符。我都一個const和非const版本,與非const版本通過引用返回,以便在類物品可以改變這樣:直到我用一個布爾值作爲
myobject[1] = myvalue;
這一切工作模板參數。下面是顯示錯誤一個完整的例子:
#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使用了一些臨時數據類型,但我不明白爲什麼它除了布爾之外的其他所有功能。
任何幫助,將不勝感激。
閱讀這篇文章:http://www.gotw.ca/publications/mill09.htm – 2010-08-11 13:42:18
它可以是固定的。見下文。你只需要返回運算符[]返回的相同類型(通常是T&(但並不總是如向量) –
2010-08-11 14:09:42