interface __declspec(uuid("F614FB00-6702-11d4-B0B7-0050BABFC904"))
ICalculator : public IUnknown
{
//...
};
Run Code Online (Sandbox Code Playgroud)
这句话扩展到了什么?如何用ANSI C++重写它?
如果您需要将 guid 静态地“附加”到界面,您还可以使用模板(特征)。考虑:
在一个普通的 h 文件中,你创建一个空的非专业模板:
template<typename TInterface> struct TInterfaceTraits {}
Run Code Online (Sandbox Code Playgroud)
在定义你的接口时,为它编写一个模板特化(或者你可以在任何其他地方编写它,包括在使用之前):
class ICalculator : public IUnknown
{
//...
};
template<> struct TInterfaceTraits<class ICalculator > {
static GUID guid() {
return IID_ICalculator ;
}
};
Run Code Online (Sandbox Code Playgroud)
然后要获得它的 uuid,您可以编写如下内容:
ICalculator *pCalcFace;
pObject->QueryInterface(TInterfaceTraits<ICalculator>::guid(), (void**)pCalcFace);
Run Code Online (Sandbox Code Playgroud)
当然,您可以为 QueryInterface 编写(我留给您)模板包装器,它将使用特征自动提供适当的 guid,这将更易于使用,即
ICalculator *pCalcFace = QueryInterface<ICalculator>(pObject);
Run Code Online (Sandbox Code Playgroud)