如何方便地将许多模板函数声明为模板类的友元函数?
示例:
template <typename T>
void funct1(MyClass<T> & A); //1.forward declaration.
template <typename T>
class MyClass{
protected:
T a;
friend funct1(MyClass<T> & A); //2.declare friend
}
template <typename T>
void funct1(MyClass<T> & A){ //3.actual implementation
++A.a;
}
步骤1,2,3对许多函数中的每一个都重复....
是否可以将所有这些功能组合成某些东西,然后声明所有东西都是模板类的朋友?
答案 0 :(得分:2)
是的!您可以static
成为class
成员函数,并将class
设为friend
。
template <typename T>
class MyClass{
protected:
T a;
friend class MyFunctions;
}
答案 1 :(得分:2)
朋友班怎么样,所有的功能都可以进入那个朋友班:
#include <iostream>
using namespace std;
template <typename T>
class MyFriend;
template <typename T>
class MyClass{
protected:
T a;
public:
MyClass(T _a):a(_a) {}
friend MyFriend<T>;
};
template <typename T>
class MyFriend {
public:
void funct1(MyClass<T> &A) {
++A.a;
cout << "A.a: " << A.a << endl;
}
void funct2(MyClass<T> &B) {
B.a += 2;
cout << "A.a: " << B.a << endl;
}
};
int main() {
MyClass<int> myclass(0);
MyFriend<int> myfriend;
myfriend.funct1(myclass);
myfriend.funct2(myclass);
return 0;
}