8

モジュールの操作を制御するさまざまなパラメーターをユーザーが取得および設定できるようにするAPIに出くわすことがよくあります。私は今、さらに別のプロパティAPIを作成することを考えていますが、車輪の再発明をしたくありません。

以下は、典型的な基本的なクライアントコードです。

setInt("bitrate", 1000);
setEnum("mode", MODE_FAST);
setStr("output file", "music.mp3");

多くの場合、設定できるパラメータは数十あり、そのようなプロパティセットは継続的に開発されています。

一部のAPIは他のAPIよりもスマートで、より高度な機能は次のとおりです。

  • プロパティの階層的なグループ化
  • プロパティの列挙
  • 最小値と最大値が適用された数値パラメータ
  • デフォルトのパラメータ値
  • 有効、無効、または読み取り専用の設定
  • 動的パラメータ-他のパラメータの状態に応じて、表示、非表示、最小/最大設定、有効化、無効化、または読み取り専用の設定。
  • テキスト名ではなくUUIDキーを介してアクセスされるプロパティ

上記のサンプルコードのCスタイルのアクセサー以外に、次のようなフレームワークに出くわしました。

  • ファイルへのプロパティの読み取り/書き込み(XMLなど)
  • Windowsレジストリへの設定の読み取り/書き込み
  • 次のようなシステムプロパティAPIとのインターフェースIPersistPropertyBag
  • ツリービューやリストなど、デフォルトのダムGUI実装があります
  • 最小/最大/有効状態に適したGUI拡張機能を使用して、GUIコードの繰り返しを減らします。

上記のすべてのフレームワークを提供する、うまく設計された公共図書館を見つけたいと思いますが、これまでのところ空白になっています。Boost.PropertyTreeを知っていますが、実際にはスケルトンにすぎません。知っておくべき他のポータブルプロパティAPIフレームワークはありますか?

4

2 に答える 2

2

Qt プロパティ システムの重要な要素の 1 つは、実際には、型指定された, ... 呼び出しQVariantを取り除くことを可能にするバリアント型クラスの非常に堅実な実装です。setIntsetString

Boost::Variantなどの同様の適切に動作するクラスを取得した場合、バッキング部分として文字列のマップを使用してプロパティ システムを実装するのはかなり簡単です。

qt プロパティ システムの便利な点の 1 つは、セッター関数とゲッター関数をユーザーが知らなくてもオーバーライドできることです。たとえば、一般的なプロパティ セッターが であるとしsetProperty(name, value)ます。実装者は、クラス宣言で、プロパティ「速度」に独自のセッターsetSpeed(float value)があることを示すことができます。これにより、クラスのユーザーが のジェネリック バージョンを呼び出すとsetProperty("speed", 100)、システムはsetSpeed(100)インスタンスを呼び出します。

そのような機能が必要ない場合は、おそらく独自のプロパティ システムを実装できます。Gamasutra には、C++でのリフレクションの実装に関する記事があり、あなたにも役立つかもしれません。

于 2011-06-08T16:54:16.923 に答える
0

Qt Coreに依存することを気にしないのであれば、Qtにはかなりうまく設計されたプロパティシステムがあります。これは、QtのMOCに依存することを意味します。

于 2011-06-02T23:28:30.320 に答える