簡體   English   中英

C ++:跟蹤對數組元素的訪問

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM