問題:如何使它成爲一個const引用公開返回並且非const引用是私人返回的?
我正在嘗試爲我的類中的某些變量創建一個只讀模板。這涉及一個模板類,它在公開時返回一個對數據的const引用。然而,在類中,我需要對數據進行操作,所以我試圖返回一個非const私有引用。這裏的基本知識:C++ - 使用模板公開返回一個const引用和一個非const引用私人
private: operator T&() { return data; }
public: operator const T&() const { return data; }
當我添加非const引用如上圖所示,如果我嘗試公開訪問變量我的Visual Studio 2010中cl.exe時編譯器告訴我,它不能訪問私有成員在類。如果使用模板聲明x,那麼簡單的cout << myobj.x << endl
將會失敗。
error C2248: 'proxy<T,C>::operator int &' : cannot access private member declared in class 'proxy<T,C>'
這裏是參考其他線程:
C++ - How to make read only class member variables in Visual Studio 2010 - Stack Overflow
編輯: 你問的代碼,所以在這兒呢。
template <class T, class C>
class proxy {
friend C;
private:
T data;
T operator=(const T& arg) { data = arg; return data; }
operator T&() { return data; } // I'd expect this is only returned privately
public:
operator const T&() const { return data; }
};
class myClass {
public:
proxy<int,myClass> x;
void f(int i) {
x = i;
}
};
int main(int argc, char **argv)
{
myClass test;
test.f(12);
cout << test.x << endl; // Compiler error trying to access non-const T&
return 0;
}
聳肩。 'operatorT&'是私有的,所以有一些你沒有顯示的代碼試圖使用它。請發佈足夠詳細的最小代碼以編譯並顯示錯誤。 –
'myobj'被聲明爲'const myclass myobj',對吧? – dasblinkenlight
這不起作用。 'myobj'爲常量時使用'const'版本。否則使用非const的運算符。在選擇操作員時,公開或私人並不重要。之後檢查訪問。 –