情况:我正在编写一个看起来像 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/