我想设置网络摄像头的属性,比如说“焦点”。通常它看起来像那样(忽略错误处理):
CComPrt<IUnknown> unkn = ...; // doesn't matter how we get that
CComPtr<IAMCameraControl> cameraCtrl;
unkn->QueryInterface(IAMCameraControl, (void**)&cameraCtrl);
cameraCtrl->Set(CameraControl_Zoom, 123, 1);
特定于MS的运算符__uuidof
返回“数据类型”,其结果可以存储在IID
类型的变量中,如下所示:
IID cameraCtrlType = __uuidof(IAMCameraControl);
我的问题:有没有办法根据IID
声明变量?这样的事情:
CComPrt<IUnknown> unkn = ...; // doesn't matter how we get that
CComQIPtr<decltype(reverse_of__uuid(cameraCtrlType))> cameraCtrl(unkn);
cameraCtrl->Set(CameraControl_Zoom, 123, 1);
我在这里寻找非模板解决方案。但是,如果有一种方法可以将IID
的语言化,那我就有兴趣看看如何这样做。
据我所知,这是不可能的,至少不能用C ++ 11甚至C ++ 17。但也许某人比我更了解我会证明我错了?