0

状況:次のようなCOMインターフェースをコーディングしています

MIDL_INTERFACE(/*....*/)
IFace : IUnknown
{
  STDMETHOD_(void, Foo)(int param) PURE;
};

インターフェースは私のプロジェクト内でのみ使用され、いくつかのコンパイル単位で使用され、idl ファイルに配置されることは想定されていません。int param論理"OR"的な方法で使用されることになっています

IFace* p;
p->Foo( param1 | param2 | param3 );

パラメータ値のリストは静的に事前定義されており、プログラムの実行中に変更されることは想定されていません。

問題は、パラメータのリストをどのように定義するかです。インターフェイスの説明は、多対多のIFaceインターフェイスの説明 (ハード レガシー) を既に含むファイルに配置する必要があります。このファイルは、プロジェクト全体の多くの場所に含まれています。ですから、インターフェースクラス自体の中にparam listの定義をしたいと思います。

IFace : IUnknown
{
  /*somehow define list of param for Foo here*/

  STDMETHOD_(void, Foo)(int param) PURE;
};

そして、ある意味でそれを使用してFoo( IFace::param1 | IFace::param2 );ください。param list を変数にしようと考えているのですが、interface-class に変数static constを配置するのは好きではありません。論理ORで必要なため、列挙型では作成できません。

インクルードファイルの完全な再編成以外に、この状況に関する良いアドバイスはありますか?

4

1 に答える 1

2

列挙型を使用できます:

IFace : IUnknown
{
    enum { Param1 = 0x1, Param2 = 0x2, Param3 = 0x4, Param4 = 0x8 ... etc.

    STDMETHOD_(void, Foo)(int param) PURE;
};
// usage
Foo( IFace::Param1 | IFace::Param2 );

パラメータの組み合わせを追加できます。

enum { Param1 = 0x1, Param2 = 0x2, Param1_and_2 = Param1 | Param2, ... etc.
//usage
Foo( IFace::Param1_and_2 );
于 2012-12-19T13:05:24.553 に答える