问题:我怎样才能使一个 const 引用公开返回,一个非 const 引用私下返回?
我正在尝试为我的类中的某些变量创建一个只读模板。这涉及一个模板类,它在公共时返回对数据的 const 引用。但是在课堂上我需要对数据进行操作,所以我试图私下返回一个不是 const 的引用。这是基础知识:
private: operator T&() { return data; }
public: operator const T&() const { return data; }
当我添加如上所示的非常量引用时,如果我尝试公开访问变量,我的 Visual Studio 2010 cl.exe 编译器告诉我它无法访问类中的私有成员。像cout << myobj.x << endl
使用模板声明 x 这样简单的事情将会失败。
error C2248: 'proxy<T,C>::operator int &' : cannot access private member declared in class 'proxy<T,C>'
这是另一个可供参考的线程:
C++ - 如何在 Visual Studio 2010 中制作只读类成员变量 - 代码日志
编辑:您要求提供代码,所以在这里。
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;
}