También puede usar plantillas (rasgos), si necesita "adjuntar" estáticamente un guid a la interfaz. Considere:
En una h-archivo común de crear una plantilla no especializada vacío:
template<typename TInterface> struct TInterfaceTraits {}
Al definir la interfaz, escriba una especialización de plantilla para él (o puede escribir en cualquier otro lugar, incluyendo justo antes uso):
class ICalculator : public IUnknown
{
//...
};
template<> struct TInterfaceTraits<class ICalculator > {
static GUID guid() {
return IID_ICalculator ;
}
};
Luego de conseguir su UUID se puede escribir algo como:
ICalculator *pCalcFace;
pObject->QueryInterface(TInterfaceTraits<ICalculator>::guid(), (void**)pCalcFace);
De la causa se puede escribir (lo dejo a usted) un envoltorio plantilla a QueryInterface, que utilizará los rasgos de suministrar automáticamente GUID adecuado, y que será más fácil de usar, es decir
ICalculator *pCalcFace = QueryInterface<ICalculator>(pObject);
@Mat: Más bien, es un '# define' para' struct'. – Xeo
@Mat: Bueno, eso es '__interface' (observe los guiones bajos), también hay una' #define interface struct' en el encabezado IUnknown. – Xeo
@ Xeo, llené como @Mat solo se retiró :) – ezpresso