質問:const参照がパブリックに返され、non const参照がプライベートに返されるようにするにはどうすればよいですか?
クラス内のいくつかの変数の読み取り専用テンプレートを作成しようとしています。これには、公開時にデータへのconst参照を返すテンプレートクラスが含まれます。ただし、クラスではデータを操作する必要があるため、個人的にconstではない参照を返そうとしています。基本は次のとおりです。
private: operator T&() { return data; }
public: operator const T&() const { return data; }
上記のように非const参照を追加すると、変数にパブリックにアクセスしようとすると、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++-VisualStudio2010で読み取り専用のクラスメンバー変数を作成する方法-StackOverflow
編集:あなたはコードを要求したので、ここにあります。
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;
}