c ++持久化数据

时间:2012-06-25 15:31:01

标签: c++ templates

我想要归档的是一些简单的方法来使一些变量持久化。 为此,我写了一个PeristenceProvider类,它包含了boost属性树的功能 将数据存储在xml / ini文件中。

目前我需要做这样的事情:

ClassA::ClassA()
{
   m_valueI = PersistenceProvider::getInstance.get<int>("valueI");
}

ClassA::~ClassA()
{
    PeristenceProvider::getInstance.set<int>("valueI", m_valueI);
}

但是有机会以这样的方式隐藏它:

class ClassA
{
     Persist<int, "valueI"> m_ValueI;
}

2 个答案:

答案 0 :(得分:1)

这可能但不完全是那样。您不能使用字符串文字来实例化模板。具有外部链接的字符串对象只允许是非类型参数。 因此,字符串常量必须定义为extern并且为char[],而不仅仅是char*

参见示例(它将打印“Hello”和“World”,真的很酷,不是吗?):

extern const char hello[] = "Hello";
extern const char world[] = "World";

template<const char* s> struct X
{
   X()
   {
      std::cout << s << std::endl;
   }
};

X<hello> z1;
X<world> z2;

答案 1 :(得分:0)

听起来你并没有坚持大量的信息 - 只是一些选择参数。如果是这样,那么只需将函数调用包装在您自己的函数中,该函数带有两个参数 - 一个std :: string或const char *以及持久化项的类型。如果持久化的类型数量有限(例如int,double,std :: string),这将正常工作。