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

时间:2010-03-17 15:47:14

标签: c++ templates

我如何理解这里声明的内容:(这取自this forum上的另一篇文章)

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

以下是我的阅读方式:

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

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

2 个答案:

答案 0 :(得分:7)

使用某些typedef:

typedef char (&arrayref_t)[1];

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

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

这是一个模板类,使用“指向intFallback成员的指针”类型实例化,并在类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;
}