C ++代码中包含异常模板功能的结构

萨本库

在下面的C ++代码(来自Microsoft COM头文件)中,以开头的部分是template<class Q>...什么?

我也由于其他原因而感到完全困惑,尽管struct使用了a,但是它具有类元素。例如public关键字。

extern "C++" {
    struct IUnknown {
    public:
        virtual HRESULT WINAPI QueryInterface(REFIID riid,void **ppvObject) = 0;
        virtual ULONG WINAPI AddRef(void) = 0;
        virtual ULONG WINAPI Release(void) = 0;
        template<class Q> HRESULT WINAPI QueryInterface(Q **pp) { return QueryInterface(__uuidof(*pp),(void **)pp); }
    };
  }
杰里·科芬(Jerry Coffin)

开头的部分template<class Q> HRESULT WINAPI QueryInterface是模板成员函数。换句话说,它是一个函数模板,是一个类(在这种情况下为struct)的成员。

成为模板意味着您可以传递任何接口类型作为其参数,并且编译器将生成一个函数来查询对象以获取该类型的接口:

IFoo *x;
IBar *y;

if (foo.QueryInterface(&x) != S_OK) {
    // use x->whatever to invoke members of IFoo
}

if (foo.QueryInterface(&y) != S_OK) {
    // use y->whatever to invoke members of IBar
}

由于它是一个函数模板,因此编译器会根据Q您传递的参数的类型推导其类型,因此,当您传递an时IFoo **Q具有类型IFoo,而当您传递an时IBar **Q具有type IBar

在C ++中,一个之间的唯一区别classstruct处于该构件的可视性class默认private,但在struct默认public(所以public:标签没有实现在这种情况下任何东西)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C ++代码中包含模板?

来自分类Dev

异常模块测试C ++

来自分类Dev

结构中的功能?C ++

来自分类Dev

如何针对不同的目的/体系结构包含/删除C代码功能?

来自分类Dev

C ++公共功能中的模板

来自分类Dev

C ++ / CLI中的功能模板

来自分类Dev

向量中带有模板的C ++结构

来自分类Dev

C ++中的高效模板结构

来自分类Dev

C ++中的高效模板结构

来自分类Dev

C++ 中的结构模板

来自分类Dev

C ++功能模板,体系结构的未定义符号

来自分类Dev

C中包含条件字段的结构

来自分类Dev

如何从C中的成员访问包含结构?

来自分类Dev

在C中返回包含本地指针的结构

来自分类Dev

C中结构内的功能指针

来自分类Dev

需要Java中类似C ++模板的功能

来自分类Dev

如何使用C ++ 14和C ++ 1z中的功能来缩短此可变参数模板代码?

来自分类Dev

在Android NDK C ++代码中捕获异常

来自分类Dev

从C#执行JS代码异常:预期功能

来自分类Dev

从C#执行JS代码异常:预期功能

来自分类Dev

如何使用C代码中的D结构?

来自分类Dev

可以将C ++模板用于条件代码包含吗?

来自分类Dev

无法在C中创建包含结构数组的结构

来自分类Dev

C ++:结构中的功能是否会与结构复制?

来自分类Dev

C ++中包含的C标准库函数是否抛出异常?

来自分类Dev

C中包含复杂指针的代码输出

来自分类Dev

包含对象的c ++结构

来自分类Dev

从C代码在Python中实现噪声功能

来自分类Dev

C ++模板-专业功能