2014-01-20 99 views
0

我讀到有關模板這裏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

的成員函數f @jrok非常挑剔! –

+0

@jrok好吧,那是指向2維數組地址的常量指針,對嗎? –

+0

@Joseph我知道,但它是我的寵物狗:) – jrok

回答

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

聲明瞭一個成員函數指針p到接受指針的20個char列數組,並返回Y<int>X<int, 20>類的成員函數。然後這個指針初始化爲類X<int, 20>