2011-01-13 11 views
1

私はThe Right Way (R)に私のプログラムの内部構成を保存することを考えていました。ここで内部設定を動的に保存する

は詳細です:

  • 設定は、だけなので、各実行を生成し、実行時です。
  • "プロジェクト"ファイルのディレクティブに適合させることができます(このファイルの読み込みはこの質問の対象外です)
  • 拡張可能である必要があります。代入値を持つ新しい「変数」を追加します。

これについての私の質問:私はこれで始める必要がありますどのように

  1. を?アクセサーとセッターを持つ クラス の内部変数std::mapのカスタム変数は良いオプションですか?
  2. 知られている「良い」方法はありますか?
  3. 整数、ブール値、および文字列 の構成変数の違いがありますか。
  4. のユーザーと組み込みの間に違いがあるかどうか (私は既に のように考えています)の変数は何ですか?

ありがとう!

PS:質問が明確でない場合は、お気軽に詳細をお尋ねください。

UPDATE:すべての答えには、暗黙的または明示的にブーストが使用されているようです。私はブーストを避けたいと述べていたはずです(今のところ標準ライブラリの能力を探求したい)。あなたは、プロパティマップのいくつかの種類よりも悪い行うことができ

答えて

1

StringMapだけでtypedefさのstd ::マップである)

class PropertyMap 
{ 
private: 
    StringMap m_Map; 

public: 
    PropertyMap() { }; 
      ~PropertyMap() { }; 

    // properties 
    template<class T> 
    T get(const String& _key, const T& _default = T()) const 
    { 
     StringMap_cit cit(m_Map.find(_key)); 
     return (cit != m_Map.end()) ? boost::lexical_cast<T>(cit->second) : _default; 
    }; // eo get 

    // methods 
    void set(const String& _cap, const String& _value) 
    { 
     m_Map[_cap] = _value; 
    }; // eo set 

    template<class T> 
    void set(const String& _key, const T& _val) 
    { 
     set(_key, boost::lexical_cast<String>(_val)); 
    }; // eo set 
}; 
3

あなたはこのためにBoost.PropertyTreeを使用することができます。

プロパティの木は、汎用性の高いデータ 構造ですが、コンフィギュレーション・データを保持するために特に 適しています。 ツリーはツリー固有のインターフェイスである を提供し、各ノード も の子ノードのSTL互換シーケンスです。

0

設定ファイルでのネストをサポートすることは非常に便利です。何かがJSONのようなものです。

パラメータ値はスカラー、配列およびパラメータのネストされたグループとすることができるように、その値は、スカラー、配列又は他の再帰的std::mapことができるstd::mapboost::variantの年代に格納することができます。std::mapは名前順にソートされるので、パラメータの元の設定ファイルの順序が重要な場合は、パラメータの順次インデックスも存在する必要があります。これは、ファーストルックアップのために順序付けられたインデックスまたはハッシュされたインデックスを持つboost::multi_indexと、元の設定ファイルの順序でパラメータをトラバースするためのシーケンシャルインデックスを使用することによって達成できます。

私はチェックしていませんが、そのブーストプロパティマップは、私が聞いたことからそれを行うことができます。

すべての値を文字列(配列値の文字列)として格納することができます。この値は、アクセス時にのみ宛先の型に変換されます。

関連する問題