我正在为配置文件处理创建一个类。我想要它的工作方式是:
有一个队列保留所有操作(插入数据,擦除数据......),然后,方法Commit
将应用所有这些更改。
我的原型看起来像那样(文件上的所有设置都存储在STL地图中):
bool Insert(std::string const& key, std::string const& value);
bool Erase(std::string const& key);
所以,我试图创建一个指向函数的指针的STL队列,但函数没有相同数量的参数,我不知道该怎么做......
答案 0 :(得分:2)
您可以创建一个Operation基类,然后派生它两次以生成Insert和Erase类。然后,您可以存储指向Operation类的指针。
class Settings
{
public:
bool Insert(std::string const& key, std::string const& value)
{
m_operations.push_back(new Insert(key, value));
return true; //?
}
bool Erase(std::string const& key)
{
m_operations.push_back(new Erase(key));
return true; //?
}
bool Commit()
{
// You know what to do by now right ?
}
private:
class Operation
{
public:
virtual void Execute() = 0
}
class Insert : public Operation
{
public:
Insert(std::string const& key, std::string const& value) :
m_key(key), m_value(value) {}
void Execute() {...}
private:
std::string m_key;
std::string m_value;
}
class Erase : public Operation
{
public:
Erase(std::string const& key) : m_key(key) {}
void Execute() {...}
private:
std::string m_key;
}
std::queue<Operation*> m_operations;
std::map<std::string, std::string> m_settings;
}
然后你要么让你的操作类成为设置类的朋友,要么将ref传递给应该应用操作的地图。