将多个函数声明为 class 的友元
Declare many functions as friends of a class
如何方便地将多个模板函数声明为一个模板的友元函数class?
示例:
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....
是否可以将所有这些函数组合成某个东西,然后声明其中的所有东西都是模板的友元class?
是的!您可以使它们成为 class
的 static
成员函数,并使 class
成为 friend
的成员函数。
template <typename T>
class MyClass{
protected:
T a;
friend class MyFunctions;
}
一个朋友怎么样class,所有的功能都可以进入那个朋友class:
#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;
}
如何方便地将多个模板函数声明为一个模板的友元函数class?
示例:
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....
是否可以将所有这些函数组合成某个东西,然后声明其中的所有东西都是模板的友元class?
是的!您可以使它们成为 class
的 static
成员函数,并使 class
成为 friend
的成员函数。
template <typename T>
class MyClass{
protected:
T a;
friend class MyFunctions;
}
一个朋友怎么样class,所有的功能都可以进入那个朋友class:
#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;
}