13

私はかなり大きな C++ アプリケーションを持っています (Windows では、他のプラットフォームは計画されていません)。現在、すべての設定 (ある種のアドレスも含む) を Windows レジストリに保存しています。

ユーザーがレジストリのエントリを変更するのが難しいため、これは不便な場合があります。設定をバージョン管理したいので、設定は常に現在のコードと一致します。現時点では、reg ファイルのバージョンを管理していますが、ターゲット マシンにすべての reg ファイルが追加されているかどうかはわかりません。C# を使用すると、app.config で既定値を定義できますが、既存の設定を上書きしないでください。そのようなメカニズムまたはライブラリが C++ に存在するかどうかはわかりません。

次の「機能」が必要です。

  • 設定はバージョン管理可能
  • ターゲット マシンでの簡単な更新 (ユーザーが実行可能)
  • 更新時に新しい設定のみが追加され、既存の設定がデフォルト値で上書きされないようにする
  • ユーザーの簡単な設定変更
  • Win XP と Win 7 で同じワークフロー

私が見る限り、Windows に設定を保存する方法は 3 つあります。

  • レジストリ
  • iniファイル
  • XML ファイル

現時点では、Qt を使用するスイートのアプリケーションは 1 つだけですが、Boost は利用可能です。

アドレスについては、ある種の XML アドレス帳に入れますが、その他の設定については、何がベスト プラクティスであるかはわかりません。

4

1 に答える 1

6

コメントが言及しているように、ツリーベースのキー/値構造は一般的なソリューションであり、ライブラリは簡単に見つけることができます。

Boost の property_treeは、十分にテストされており、XML または JSON として簡単にエクスポートできるため、優れた選択肢です。

あなたの要件について:

  • 設定はバージョン管理可能

はい!「バージョン」を最上位キーにします。他のバージョンと簡単に比較できるようにします。

設定をさまざまなツリー ノードに分類し、各ノードにバージョンを与えることもできます。

  • ターゲット マシンでの簡単な更新 (ユーザーが実行可能)

実行時にアプリケーションにそれを実行させます。下記参照。

  • 更新時に新しい設定のみが追加され、既存の設定がデフォルト値で上書きされないようにする
  • ユーザーの簡単な設定変更
  • Win XP と Win 7 で同じワークフロー

設定がバージョンごとに変更されると、通常、これらの変更は 3 つのカテゴリに分類されます。新しいプロパティが必要になり、古い設定が破棄され、一部の設定が期待される形式を変更します。たとえば、「華氏 32 度」は「摂氏 0 度」になります。

アプリケーションの初期化時:

  • バージョンに関係なく、既存の構成ファイルをロードします。
  • バージョンがアプリケーションの最新のものと一致しない場合:
    • 新しい構成用の新しい空白のプロパティ ツリーを作成します。
    • ツリー内の各ノードに対して、予想されるプロパティ名のセットと、古いファイルのツリーに存在しない場合にこの設定を取得するための関数ポインターなどを用意します。設定の形式が変更された場合は、新しい名前を付けます。
    • 古いツリーで各設定を検索し、見つかった場合はコピーし、見つからない場合は提供された関数の結果を使用します。
    • 新しい設定ファイルを保存します。

「不足している設定」関数は次のことができます。

  • 定数のデフォルト値を返します。
  • ツリーに別の設定を照会して変換します (古い設定も見つからない場合はデフォルト値を使用します)。
  • ユーザーに尋ねる
于 2012-06-28T00:54:48.360 に答える