将多个函数声明为类的友元
Declare many functions as friends of a 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对每个函数都重复....
是否有可能将所有这些函数组合成某个东西,然后声明其中的所有东西都是模板类的朋友?
那么一个friend类呢,所有的函数都可以放到一个friend类中:
#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;
}
是的!你可以把它们变成static
的class
的成员函数,把class
变成friend
。
template <typename T>
class MyClass{
protected:
T a;
friend class MyFunctions;
}
相关文章:
- 如何在嵌套类中正确使用友元声明?
- 类模板中文本运算符的友元声明
- 模板和隐式构造函数的类定义之外的友元声明
- 如何将友元声明用于具有约束的模板类
- 模板化友元声明在 G++ 5.4.0 下不起作用 - 编译器错误或错误代码
- 友元声明阻止外部函数访问类的私有部分
- C++:友元声明'声明一个非模板函数
- 友元声明及其表示的实体
- 嵌套类中需要前向声明的友元声明
- 多参数模板不能很好地处理友元声明
- 友元声明和显式模板实例化声明
- 为什么标准禁止部分专门化的友元声明
- is_constructible和is_destructibble不受友元声明的影响
- Pimpl习语和内部对象协作,无需友元声明
- C++中的友元声明-公共和私有之间的区别
- 单个成员而不是整个类的友元声明
- 关于 C++ 中友元声明的基本内容错误
- 有没有办法避免模板友元声明的外部可见性
- 如何解决c++中友元声明的循环依赖
- 指定默认实参的友元声明必须是定义