6

我要归档的是一种使某些变量持久化的简单方法。为此,我编写了一个 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;
}
4

2 回答 2

1

这是可能的,但不完全是这样。您不能使用字符串文字来实例化模板。具有外部链接的字符串对象只允许是非类型参数。所以字符串常量必须定义为externand be 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;
于 2012-08-17T21:50:37.770 回答
0

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

于 2012-06-25T16:37:11.700 回答