繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM