我有一個類用於跟蹤變量假定的值。我通過重載operator =來實現它。 用例:C++:跟蹤訪問數組元素
myType var0;
var0 = 1;
var0 = 3;
產生在stdout:
1
3
這正常使用變量,而不是使用數組。我怎樣才能擴展這個功能?
我有一個類用於跟蹤變量假定的值。我通過重載operator =來實現它。 用例:C++:跟蹤訪問數組元素
myType var0;
var0 = 1;
var0 = 3;
產生在stdout:
1
3
這正常使用變量,而不是使用數組。我怎樣才能擴展這個功能?
好吧,無論如何陣列不支持operator=
,所以這不是一個真正的問題。您當然可以分配給各個陣列元素,但已由您現有的operator=
涵蓋。
您可以創建一個重載內部內MyTypes
你想要做的就是使用代理類陣列,並且在該類上定義一個操作數組[]操作符來存儲值MyArrayType []功能。很像std :: vector如何做到這一點。
您會在將非常量引用生成到數組元素時進行跟蹤。我認爲你不得不假定它即將被寫入。您可以將數組從現有的類中取出,以便看到實際的寫入。
輸出可能看起來像: 裁判元件32:寫1
或者無論你想它。
一種方法是重載[]
運算符以返回「代理」 - 一個引用您的變量的對象,並且重載=
運算符來執行跟蹤。
下面是一個示例實現:
#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
它應該工作爲**數組元素**完全相同。你能發佈你的MWE嗎? – nickie
下標運算符,運算符[]是什麼? – erenon