2つの配列添え字演算子のオーバーロードを持つクラスが必要です。1つは読み取りに使用され、もう1つは書き込みに使用されます。
目的は、変化のカウンターを維持することです。私は( http://faculty.cs.niu.edu/~mcmahon/CS241/c241man/node97.htmlで)次のようなことができると読みました:
template<typename T>
class Array
{
public:
Array()
{
data = new T[100];
}
T &operator[] (int index)
{
cout << "Is writing\n";
changes++;
return data[index];
}
T operator[] (int index) const
{
cout << "Is reading\n";
return data[index];
}
private:
T *data;
int changes;
};
しかし、私の場合はうまくいきません。-std = c++11でg++4.7を使用していますが、実際には、次の場合でも「書き込み中」のみが画面に出力されます。
Array<int> a;
a[0] = 3;
cout << a[0] << endl;
また、gcovでソースを調べることによって、後者が呼び出されることはないことにも気づきました。そのページの方法は完全に間違っていますか、それとも私が誤解しているものですか?
前もって感謝します。