6

私がアーカイブしたいのは、いくつかの変数を永続化する簡単な方法です。このために、boost プロパティ ツリー機能をラップしてデータを xml / ini ファイルに格納する PeristenceProvider クラスを作成しました。

現時点では、次のようなことを行う必要があります。

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

可能ですが、正確にはそうではありません。文字列リテラルを使用してテンプレートをインスタンス化することはできません。外部リンケージを持つ文字列オブジェクトは、型以外の引数にのみ許可されます。したがって、文字列定数は だけでなくexternおよび と定義する必要があります。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

大量の情報を保持していないようです-いくつかの選択パラメータだけです。その場合は、2つの引数(std ::stringまたはconstchar*と永続化される項目のタイプ)をとる独自の関数で関数呼び出しをラップするだけです。永続化される型の数が制限されている場合(たとえば、int、double、std :: string)、これは正常に機能します。

于 2012-06-25T16:37:11.700 に答える