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}; }
};
我想实现一个简单的数据库来练习,但是我找不到一个问题的解决方案。让我们有这样的东西:
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}; }
};