C++,在方括号后执行操作 setter

C++, Make action after square-bracket setter

我想实现一个简单的数据库来练习,但是我找不到一个问题的解决方案。让我们有这样的东西:

template <class T> class simpleDB
{
public:
    string pathToFile;
    void writeToFile();
    vector<T> base;

    //setter for "base"
    //getter for "base"
}

我希望在每个方括号 setter 调用后调用 writeToFile(),所以问题是:"How should I write such []setter?"。

google 上有很多 setter 示例,但其中 none 可用于在返回向量成员引用后调用某些内容。 请注意,T 应该是任何自定义复杂结构,例如:

struct point
{
    int x,y;
}

谢谢

UPD:按照要求,我想将其用作(我跳过了分配第一个元素的部分,因为这不是问题):

simpleDB<point> db;
db[0].x = 1;
db[0].y = 1;

使用赋值运算符创建代理 class。

template <class T> class simpleDB {
    // ...

    class Proxy {
        simpleDB& db;
        size_t i;
        Proxy& operator=(T t) {
            // If you want to auto-allocate the slot...
            if (db.base.size() <= i) db.base.resize(i + 1);
            db.base[i] = t;
            db.writeToFile();
            return *this;
        }
        T operator*() const { return db.base.at(i); }
    };

    Proxy operator[](size_t i) { return {*this, i}; }
    const Proxy operator[](size_t i) const { return {*this, i}; }
};