2013-10-29 83 views
0

我有一個類用於跟蹤變量假定的值。我通過重載operator =來實現它。 用例:C++:跟蹤訪問數組元素

myType var0; 
var0 = 1; 
var0 = 3; 

產生在stdout:

1 
3 

這正常使用變量,而不是使用數組。我怎樣才能擴展這個功能?

+1

它應該工作爲**數組元素**完全相同。你能發佈你的MWE嗎? – nickie

+0

下標運算符,運算符[]是什麼? – erenon

回答

0

好吧,無論如何陣列不支持operator=,所以這不是一個真正的問題。您當然可以分配給各個陣列元素,但已由您現有的operator=涵蓋。

0

您可以創建一個重載內部內MyTypes

1

你想要做的就是使用代理類陣列,並且在該類上定義一個操作數組[]操作符來存儲值MyArrayType []功能。很像std :: vector如何做到這一點。

您會在將非常量引用生成到數組元素時進行跟蹤。我認爲你不得不假定它即將被寫入。您可以將數組從現有的類中取出,以便看到實際的寫入。

輸出可能看起來像: 裁判元件32:寫1

或者無論你想它。

2

一種方法是重載[]運算符以返回「代理」 - 一個引用您的變量的對象,並且重載=運算符來執行跟蹤。

下面是一個示例實現:

#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; 
} 

prints

Asigning 123 to element 5 
Asigning 321 to element 8 
Reading element at 5