[英]C++: track access to array element
我有一個類,用於跟蹤變量假定的值。 我通過重載operator =來實現它。 用法示例:
myType var0;
var0 = 1;
var0 = 3;
在標准輸出上生成:
1
3
這適用於變量,但不適用於數組。 如何擴展此功能?
一種方法是重載[]
運算符以返回“代理”(一個引用變量的對象,並重載=
運算符以進行跟蹤)。
這是一個示例實現:
#include <iostream>
using namespace std;
struct myArray;
class proxy {
myArray &array;
int index;
public:
proxy(myArray &_array, int _index)
: array(_array)
, index(_index) {
}
proxy& operator=(int value);
operator int() const;
};
struct myArray {
int data[100];
proxy operator[](int index) {
return proxy(*this, index);
}
};
proxy& proxy::operator=(int value) {
cout << "Asigning " << value << " to element " << index << endl;
array.data[index] = value;
return *this;
}
proxy::operator int() const {
cout << "Reading element at " << index << endl;
array.data[index];
}
int main() {
myArray a;
a[5] = 123;
a[8] = 321;
int x = a[5];
return 0;
}
此打印
Asigning 123 to element 5
Asigning 321 to element 8
Reading element at 5
您要做的是為數組使用代理類,並在該類上定義一個operator []函數。 就像std :: vector如何做到的。
您將跟蹤何時生成對數組元素的非常量引用。 我認為您必須假設它即將被寫入。 您可以使用現有的類制作數組,以便看到實際的寫入。
輸出可能類似於:引用元素32:寫入1
或者,但是您想要它。
嗯,數組無論如何都不支持operator=
,所以這不是一個真正的問題。 您當然可以分配給單個數組元素,但是現有的operator=
已經涵蓋了這一點。
您可以創建一個MyArrayType來重載[]運算符,以將值內部存儲在MyTypes數組中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.