Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;持久化数据_C++_Templates - Fatal编程技术网

C++ c++;持久化数据

C++ c++;持久化数据,c++,templates,C++,Templates,我想要归档的是一种使一些变量持久化的简单方法。 为此,我编写了一个PeristenceProvider类,它封装了boost属性树功能 将数据存储在xml/ini文件中 目前我需要做这样的事情: ClassA::ClassA() { m_valueI = PersistenceProvider::getInstance.get<int>("valueI"); } ClassA::~ClassA() { PeristenceProvider::getInstance.s

我想要归档的是一种使一些变量持久化的简单方法。 为此,我编写了一个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;
}
ClassA::ClassA()
{
m_valueI=PersistenceProvider::getInstance.get(“valueI”);
}
ClassA::~ClassA()
{
PeristenceProvider::getInstance.set(“valueI”,m_valueI);
}
但有没有机会用这样的方式来掩盖这一点:

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;
}
A类
{
坚持价值观;
}

听起来你并没有保存大量的信息——只是一些选择参数。如果是这样的话,那么只需将函数调用封装在您自己的函数中,这些函数包含两个参数——一个std::string或const char*和要持久化的项的类型。如果被持久化的类型的数量有限(例如int、double、std::string),这将很好地工作。

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

参见示例(它将打印“Hello”和“World”,非常酷,不是吗?)

extern const char hello[]=“hello”;
外部常量字符世界[]=“世界”;
模板结构X
{
X()
{

std::我想你可以接近模板,但对于你来说,你需要宏魔法才能做到这一点。如果你需要从变量名生成字符串标识符,你需要宏。你可以将字符串文本作为模板参数传递吗?我不介意添加第二个模板参数,其中包含传递模板字符串的名称不允许使用参数!您可以使用序数。除此之外,我不会使变量持续存在,而是将其存储在精确的位置,或者使用封送器/封送器体系结构。Poco的配置框架非常适合做这样的事情: