一:让类模板的某个实例成为友元。
#include <iostream>
#include <vector>
#include <list>
using namespace std;
#pragma warning(disable : 4996)
template <typename T> class B; //声明
template <typename T>
class A
{
friend class B<int>; //针对int类型的类B,
private:
int data;
};
template <typename T>
class B
{
public:
void callfun()
{
A<int> p;
p.data = 10;
cout << p.data << endl;
}
};
int main()
{
B<int> obj;
obj.callfun();
return 0;
}
二:类模板成为友元类模板。
#include <iostream>
#include <vector>
using namespace std;
#pragma warning(disable : 4996)
template <typename T>
class A
{
template <typename T>
friend class B;
private:
int data;
};
template <typename T>
class B
{
public:
void callfun()
{
A<int> p;
p.data = 10;
cout << p.data << endl;
}
};
int main()
{
B<long> obj;
obj.callfun();
return 0;
}
三:让类型模板参数成为友元类,cpp11。
#include <iostream>
#include <vector>
using namespace std;
#pragma warning(disable : 4996)
template <typename T>
class A
{
friend T; //cpp11
private:
int data;
};
class B
{
public:
void call()
{
A<B> obj;
obj.data = 10;
cout << obj.data << endl;
}
};
int main()
{
B b;
b.call();
return 0;
}