C ++,在方括号设置器后执行操作

时间:2017-04-27 09:57:52

标签: c++ setter

我想为练习实现简单的数据库,但我找不到解决一个问题的方法。我们有类似的东西:

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

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

我希望在每个方括号setter调用之后调用writeToFile(),所以问题是:“我应该怎么写这样的[] setter?”。

google上有很多setter示例,但在返回vector成员的引用之后,没有一个可以调用某些东西。 请注意,T应该是任何自定义复杂结构,例如:

struct point
{
    int x,y;
}

由于

UPD:如我所知,我想用这个东西(我跳过第一个元素的分配,因为它不是一个问题):

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

1 个答案:

答案 0 :(得分:2)

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

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