奇怪的声明(模板)。 C++
问题描述:
我怎样才能明白什么是这里声明:(这是从另一个职位采取this forum)奇怪的声明(模板)。 C++
template<typename C> static char (&f(ChT<int Fallback::*, &C::x>*))[1];
我是这样看:调用(ChT<int Fallback::*, &C::x>*)
静态函数f
的
模板,但后来我没有意义为什么有一个地址的运算符,为什么有一个数组?
我还在学习如何理解C++声明,所以请慢慢仔细地解释一下。
答
看到返回类型很重要。 所以,这个函数的返回类型是参考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;
}
答
使用一些类型定义:
typedef char (&arrayref_t)[1];
这是字符数组的引用。该数组有一个元素。
typedef ChT<int Fallback::*, &C::x> tmpl_t;
这是一个模板类,具有类型“指针Fallback
类的int
构件”实例化,以及构件指针x
在C
类。
函数现在需要一个指针到一个tmpl_t
并返回一个arrayref_t
。
+0
我刚才观察到很有趣的事情(是的,我仍然在咀嚼它)。如果你在说“这是...,并且是类C中的成员指针x”,应该指出,由于类ChT的声明,C类中的这个成员指针实际上是类Fallback的成员。所以,事实上他们是相互联系的。 – 2010-03-17 17:05:55
你为什么要这样做? – Axarydax 2010-03-17 15:54:08
@Axarydax在做什么? – 2010-03-17 15:55:03
我想我看到他从xD得到的那个 – 2010-03-17 16:02:25