您好我正在尝试使一些公共成员变量只读。我知道我可以做类似的事情:
private: int _x;
public: const int& x;
Constructor(): x(_x) {}
我正在寻找更易于管理和更易于阅读的东西。我在互联网上找到了几个模板,所有这些模板都类似于这个SO 答案中描述的代理类。
我正在尝试调整该代理类,以便我可以将模板放入包含中,并为类中的每个变量编写类似的内容,我需要只读变量:
public: proxy<int, myClass> num;
如果我不必每次都说类名,但我不知道如何解决这个问题,除非在模板中标识了类名,否则会更容易。
我在 Visual Studio 2010 中尝试过,但它不起作用,有人知道为什么吗?
template <class T, class C>
class proxy {
friend class C;
private:
T data;
T operator=(const T& arg) { data = arg; return data; }
public:
operator const T&() const { return data; }
};
class myClass {
public:
proxy<int,myClass> x;
public:
void f(int i) {
x = i;
}
};
谢谢
编辑-有人问我的意思是什么不起作用:
int main(int argc, char **argv)
{
myClass test;
test.f(12);
cout << test.x << endl;
return 0;
}
返回:
b.cpp(122) : error C2649: 'typename' : is not a 'class'
b.cpp(128) : see reference to class template instantiation 'proxy<T,C>'
being compiled
b.cpp(136) : error C2248: 'proxy<T,C>::operator =' : cannot access private membe
r declared in class 'proxy<T,C>'
with
[
T=int,
C=myClass
]
b.cpp(125) : see declaration of 'proxy<T,C>::operator ='
with
[
T=int,
C=myClass
]