[英]Strange declaration(templates). C++
我如何理解这里声明的内容:(这是从本论坛的其他帖子中获取的)
template<typename C> static char (&f(ChT<int Fallback::*, &C::x>*))[1];
这是我的阅读方式:
静态函数f
模板调用(ChT<int Fallback::*, &C::x>*)
,但后来我无法理解为什么有一个地址运算符,为什么有一个数组?
我还在学习如何理解C ++声明,所以请慢慢仔细地解释一下。
使用一些typedef:
typedef char (&arrayref_t)[1];
这是对字符数组的引用。 该数组有一个元素。
typedef ChT<int Fallback::*, &C::x> tmpl_t;
这是一个模板类,使用“指向Fallback
类的int
成员的指针”类型实例化,并在C
类中指向x
的成员指针。
static arrayref_t f(tmpl_t*);
该函数现在接受一个指向tmpl_t
的指针并返回一个arrayref_t
。
看到返回类型很重要。 所以,这个函数的返回类型是对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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.