嗨我想讓一些公共成員變量只讀。我知道我可以做這樣的事情:如何在Visual Studio 2010中使只讀類成員變量
private: int _x;
public: const int& x;
Constructor(): x(_x) {}
我在尋找的東西更易於管理,更易於閱讀。我在互聯網上發現了幾個模板,所有這些模板與this 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
]
所以你說模板比'const'更易於管理和閱讀? –
告訴我們「它不工作」的意思是 –
@Luchian一點都不。我需要一些公開只讀的內容,並且私下沒有這些限制。 'const'很棒,它不是我在這裏找的東西。如果我使用前者,那麼在所有的類函數中,我都必須附加一個前綴,並且有很多變量可以用來做這件事。我認爲它只是爲了更醜陋的代碼。 – loop