c++ - 奇怪的声明(模板)。 C++

标签 c++ templates

我如何理解此处声明的内容:(这是从 this forum 上的另一篇文章中摘录的)

template<typename C> static char (&f(ChT<int Fallback::*, &C::x>*))[1];

我是这样读的:

静态函数模板f(ChT<int Fallback::*, &C::x>*) 调用,但我无法理解为什么有地址运算符以及为什么有数组?

我仍在学习如何理解 C++ 声明,所以请慢慢仔细地解释这一点。

最佳答案

使用一些类型定义:

typedef char (&arrayref_t)[1];

这是对字符数组的引用。该数组只有一个元素。

typedef ChT<int Fallback::*, &C::x> tmpl_t;

这是一个模板类,使用“指向int 类的Fallback 成员的指针”类型和指向x 的成员指针实例化。在类里面C .

static arrayref_t f(tmpl_t*);

函数现在接受一个指向 tmpl_t 的指针并返回 arrayref_t .

关于c++ - 奇怪的声明(模板)。 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2463697/

相关文章:

c++ - 从元组中解包参数

c++ - 如何以编程方式显示Windows系统(标题栏)菜单

c++ - 在带有 MinGW 编译器的 C++ 中使用 COM 对象

c++ - 我将如何实现一个函数来提取此类的元素?

c++ - 使用外部模板 (C++11)

c++ - 模板、多态性、抽象基类指针和运行时转换

c++ - 将私有(private)参数中继到派生类虚拟方法

c++ - 并行化这个的最好方法是什么?

C++ 静态与非静态类成员

javascript - 如何停止在 node.js 中获取此 ReferenceError?