模板类友元模板函数问题, 求解
问题见代码中中文注释部分
- 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;}