复杂的模板功能

时间:2014-01-20 12:06:03

标签: c++ templates

当我看到这段代码让我感到困惑时,我在这里阅读有关模板的http://publib.boulder.ibm.com/

template<class T> class Y { };

template<class T, int i> class X {
   public:
      Y<T> f(char[20][i]) { return x; };
      Y<T> x;
};

template<template<class> class T, class U, class V, class W, int i>
   void g( T<U> (V::*)(W[20][i]) ) { };

int main()
{
   Y<int> (X<int, 20>::*p)(char[20][20]) = &X<int, 20>::f;
   g(p);
}

请您解释一下这条线的含义是什么?

Y<int> (X<int, 20>::*p)(char[20][20]) = &X<int, 20>::f;

我无法理解它的含义。感谢名单!

1 个答案:

答案 0 :(得分:3)

Y<int> (X<int, 20>::*p)(char[20][20]) = &X<int, 20>::f;

向类p的成员函数声明成员函数指针X<int, 20>,该函数接受指向20 char s的数组的指针,并返回Y<int>。然后使用类f

的成员函数X<int, 20>初始化此指针