读书人

模板类友元模板函数有关问题, 求解

发布时间: 2012-08-03 00:12:14 作者: rapoo

模板类友元模板函数问题, 求解
问题见代码中中文注释部分

C/C++ code
#include <iostream>#include <cstring>#include <vector>using namespace std;template <typename T>class Array;template<typename T>void f( const Array<T> &a );template <typename T>class Array{    T* array;    int size;    public:    Array(int sz): size(sz)    {        size = sz;    }    friend void f<> ( const Array<T> &a );        //为什么不能在类中定义友元函数呢??    //很奇怪的是, 当我把友元函数 f<>的specialization的定义    //        template<>    //        void f( const Array<int> &a)    //        {    //            cout << a.size << " int" << endl;    //        }    //注释之后, 下面的定义能够通过编译, 并正确运行    template<typename Type>    friend void testVer2( const Array<Type> &a )    {        cout<< "what" << endl;    }};// f function template, friend of Array<T>template <class T>void f( const Array<T> &a){    cout << a.size << " generic" << endl;}// Specialization of f for char arrays// will be a friend because the template f is a friend.template<>void f( const Array<int> &a){    cout << a.size << " int" << endl;}


[解决办法]
C/C++ code
#include <iostream>#include <cstring>#include <vector>using namespace std;template <typename T>class Array;template<typename T>void f( const Array<T> &a );template <typename T>class Array{    T* array;    int size;    public:    Array(int sz): size(sz)    {        size = sz;    }    friend void f ( const Array<T> &a )    {        cout << a.size << " int" << endl;    }        //为什么不能在类中定义友元函数呢??    //很奇怪的是, 当我把友元函数 f<>的specialization的定义    //       template<>    //        void f( const Array<int> &a)    //        {    //            cout << a.size << " int" << endl;    //        }    //注释之后, 下面的定义能够通过编译, 并正确运行    template<typename Type>    friend void testVer2( const Array<Type> &a )    {        cout<< "what" << endl;    }};// f function template, friend of Array<T>template <class T>void f( const Array<T> &a){    cout << a.size << " generic" << endl;}// Specialization of f for char arrays// will be a friend because the template f is a friend.template<>void f( const Array<int> &a){    cout << a.size << " int" << endl;} 

读书人网 >C++

热点推荐