2012-06-25 109 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;