2012-06-25 74 views
6

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

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

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; 
} 
+0

我认为你可以亲近与模板,但你需要的宏魔术使它完全如此。 – Stormenet

+1

如果您需要从变量名称生成字符串标识符,您将需要宏 –

+0

您是否可以将字符串字面值作为模板参数传递? – tmpearce

回答

0

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

1

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

见例子(它会打印“你好”和“世界”,真的很酷,不是吗?):

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;