我如何理解这里声明的内容:(这取自this forum上的另一篇文章)
template<typename C> static char (&f(ChT<int Fallback::*, &C::x>*))[1];
以下是我的阅读方式:
使用f
调用的静态函数(ChT<int Fallback::*, &C::x>*)
的模板,但是我无法理解为什么有一个地址运算符以及为什么有一个数组?
我还在学习如何理解C ++声明,所以请慢慢仔细地解释一下。
答案 0 :(得分:7)
使用某些typedef:
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
。
答案 1 :(得分:3)
看到返回类型很重要。
所以,这个函数的返回类型是char[1]
的引用;
想象一下,f
会返回类似于以下内容的内容:
char ret[1];
例如
template<typename C> static char (&f(ChT<int Fallback::*, &C::x>*))[1]
{
static char xx[1] = {'F'};
return xx;
}