Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基于uuidof声明变量_C++_C++11_Visual C++_Com - Fatal编程技术网

C++ 基于uuidof声明变量

C++ 基于uuidof声明变量,c++,c++11,visual-c++,com,C++,C++11,Visual C++,Com,我想设置网络摄像头的属性,比如“焦点”。通常情况下,它看起来是这样的(忽略错误处理): 我的问题:有没有一种方法可以根据变量的IID来声明变量?诸如此类: CComPrt<IUnknown> unkn = ...; // doesn't matter how we get that CComQIPtr<decltype(reverse_of__uuid(cameraCtrlType))> cameraCtrl(unkn); cameraCtrl->Set(Camer

我想设置网络摄像头的属性,比如“焦点”。通常情况下,它看起来是这样的(忽略错误处理):

我的问题:有没有一种方法可以根据变量的
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);
ccomport unkn=…;//不管我们是怎么得到的
CCOMKIPTR cameraCtrl(unkn);
Cameracrl->Set(CameraControl_Zoom,123,1);
我在这里寻找一个非模板解决方案。但是如果有一种方法可以通过
IID
实现模板化,我很想看看如何做到这一点


据我所知,这是不可能的,至少在C++11甚至C++17中是不可能的。但也许比我更有知识的人会证明我错了?

你到底想通过这个(可能是xy问题…)实现什么?如果您通过使用
\uuidof(SomeType)
获得uuid,您会得到类似于
\uuidof(SomeType))的
\uuidof(SomeType))
,那么为什么您不能直接使用
SomeType
?IAMCameraControl
IAMDVideoProCamp
接口都公开具有相同名称和参数的函数。我正在为UVC编写一个UI,并尝试在两种场景中重用相同的代码。唯一(文本(!),而不是代码或二进制)的区别实际上是接口的名称,因此我希望在
if(uuuuidof(…)==…)
语句中统一代码来处理这两个问题。在指定
cameraCtrl
变量之前,一切正常。正如我所说的,我很自信这是不可能的,因为C++需要知道函数绑定的类型。这就真的需要一个模板了……我并不笨,我只是好奇:)主要是关于是否可以基于对
\uuuid
的反向操作声明一个变量。我甚至不知道如何在模板的情况下实现这一点:如何基于
IID
进行模板化,并且在该模板中有一个
IID
所指类型的变量,如果
IAMCameraControl
iamvideprocamp
接口都公开了具有相同名称和参数的函数,那么这是否意味着它们两者都派生/实现公共接口?如果是这样,那么为什么不通过这个公共接口使用它们呢?如果不是,而且它们现在恰好是相同的,那么您不应该尝试将它们合并为一个类并严格分开使用,因为否则,当其中一个类发生更改时,或者如果您没有注意到它们之间的一些小差异,您将遇到麻烦。
IID cameraCtrlType = __uuidof(IAMCameraControl);
CComPrt<IUnknown> unkn = ...; // doesn't matter how we get that
CComQIPtr<decltype(reverse_of__uuid(cameraCtrlType))> cameraCtrl(unkn);
cameraCtrl->Set(CameraControl_Zoom, 123, 1);