当我看到这段代码让我感到困惑时,我在这里阅读有关模板的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;
我无法理解它的含义。感谢名单!
答案 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>
初始化此指针