我如何理解这里声明的内容:(这是从本论坛的其他帖子中获取的)
template<typename C> static char (&f(ChT<int Fallback::*, &C::x>*))[1];
Run Code Online (Sandbox Code Playgroud)
这是我的阅读方式:
静态函数的模板f调用(ChT<int Fallback::*, &C::x>*),但后来我无法理解为什么有一个地址运算符,为什么有一个数组?
我还在学习如何理解C++声明,所以请慢慢仔细地解释一下.
使用一些typedef:
typedef char (&arrayref_t)[1];
Run Code Online (Sandbox Code Playgroud)
这是对字符数组的引用.该数组有一个元素.
typedef ChT<int Fallback::*, &C::x> tmpl_t;
Run Code Online (Sandbox Code Playgroud)
这是一个模板类,具有类型"指针,实例化的int所述的构件Fallback类",和一个构件指针x类C.
static arrayref_t f(tmpl_t*);
Run Code Online (Sandbox Code Playgroud)
该函数现在采用指向a的指针tmpl_t并返回一个arrayref_t.
查看返回类型很重要。因此,该函数的返回类型是对char[1];的引用。想象一下f返回类似以下内容的引用:
char ret[1];
Run Code Online (Sandbox Code Playgroud)
例如
template<typename C> static char (&f(ChT<int Fallback::*, &C::x>*))[1]
{
static char xx[1] = {'F'};
return xx;
}
Run Code Online (Sandbox Code Playgroud)