2012-06-25 12 views
6

quello che voglio archiviare è un modo semplice per rendere persistenti alcune variabili. Per questo ho scritto una classe PeristenceProvider che avvolge la funzionalità dell'albero delle proprietà boost per memorizzare i dati nei file xml/ini.C++ dati persistenti

Al momento ho bisogno di fare le cose in questo modo:

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

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

ma c'è la possibilità di nascondere questo in un modo simile a questo:

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

Penso che è possibile avvicinarsi con i modelli, ma per avrete bisogno macro magia per renderlo esattamente così. – Stormenet

+1

Se è necessario generare identificatori di stringa dai nomi delle variabili, sono necessarie macro –

+0

È possibile passare letterale stringa come parametro del modello? – tmpearce

risposta

0

suona come non si persisti tonnellate di informazioni - solo pochi parametri di scelta. Se è così, allora avvolgi semplicemente le chiamate di funzione nelle tue funzioni che accettano due argomenti: una std :: string o const char * e il tipo di elemento che viene mantenuto. Se il numero di tipi persistenti è limitato (ad esempio int, double, std :: string), funzionerà correttamente.

1

È possibile ma non esattamente in questo modo. Non è possibile utilizzare stringhe letterali per creare un'istanza del modello. Gli oggetti stringa con collegamento esterno possono essere argomenti non di tipo. Quindi la costante di stringa deve essere definita come extern e deve essere char[], non solo char*.

Vedere esempio (si stampa "Ciao" e "Mondo", davvero cool, non è vero?):

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; 
Problemi correlati