c++ - 接口(interface)描述中接口(interface)方法的预定义参数列表

标签 c++ com interface code-organization

情况:我正在编写一个看起来像 COM 接口(interface)的代码

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

接口(interface)应该只在我的项目中使用,在几个编译单元中,不应该放在 idl 文件中。 int param 应该以逻辑“OR”方式使用

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

参数值列表是静态预定义的,不应在程序执行期间修改。

问题是:如何定义参数列表? IFace 接口(interface)描述应该放在一个已经包含许多接口(interface)描述的文件中(hard legacy),这个文件包含在整个项目的许多地方。所以,我想在接口(interface)类本身中定义参数列表。

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

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

并以 Foo( IFace::param1 | IFace::param2 ); 的方式使用它。我考虑将参数列表作为 static const 变量,但我不喜欢将 variables 放在接口(interface)类中的想法。我不能用枚举来实现,因为我需要逻辑或。

除了完全重组包含文件之外,对于这种情况还有什么好的建议吗?

最佳答案

你可以使用枚举:

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

关于c++ - 接口(interface)描述中接口(interface)方法的预定义参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13952935/

相关文章:

c++ - 从 2D 点阵列创建图像

c++ - 为什么有些人只说 "C+"而不是 C++?

MFC 上的 COM "Server busy"对话框

c++ - 为什么lnk图标不能正常显示?

oop - 接口(interface)中的 void 方法是代码气味吗?

c++ - 如何获取 libmathplot.a

c++ stack stringstream函数返回整数与ASCII

c++ - C++ 中的 CreateObject 等价物

java - 动态加载遵循接口(interface)的类

Java - 对于给定函数 foo(X i);在接口(interface)X中,为什么不能实现类Y将其更改为foo(Y i)?