список предопределенных параметров для метода интерфейса в описании интерфейса

Ситуация: я кодирую COM-интерфейс в виде

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

Предполагается, что интерфейс используется только внутри моего проекта, в нескольких единицах компиляции, а не в файле idl. int param предполагается использовать в"OR" путь

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

Список значений параметров статически предопределен и не должен изменяться во время выполнения программы.

Вопрос: как определить список параметров? IFace описание интерфейса должно быть помещено в файл, уже содержащий множество описаний интерфейсов (сложное наследие), этот файл включен во многие места по всему проекту. Итак, я хотел бы иметь определение списка параметров внутри самого класса интерфейса.

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

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

И использовать его таким образом, Foo( IFace::param1 | IFace::param2 );, Я думаю о том, чтобы сделать список параметров как static const переменные, но мне не нравится идея разместить переменные в интерфейсном классе. Я не могу сделать это с помощью enum, потому что мне нужно это с помощью логического ИЛИ.

Какие-нибудь хорошие советы в этой ситуации, кроме полной реорганизации включаемых файлов?

0

Решение

Вы можете использовать перечисления:

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 );
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector