// 模版类与友元 // 外部实现的友元函数 // 是函数模板时,必须在类定义之前声明。在类中声明友元全局函数时,必须使用<> 空泛型表示此函数是函数模板。 #include #include #include using namespace std; template class A; template void showOut(A &a); template class A { // 外部实现的友元函数,它有自己的模版类型,不需要指定当前模版类的类型 // <>空泛型表示外部是函数模版,模版的泛型同当前类的泛型 // 要求: 必须之前先声明此函数为构造函数 friend void showOut<>(A &a); private: T item; public: A(T item) { this->item = item; } }; template void showOut(A &a) // 全局友元函数 { cout << "out item is: " << a.item << endl; } int main() { A a(30); showOut(a); return 0; }