//特定的模板友元关系
#include "stdafx.h"
#include <iostream>
using namespace std;
template<class T>class MyClass1;
template<class T>T Get( const T&);
template<class T>
class MyClass
{
public:
MyClass(){};
~MyClass(){};
friend class MyClass1<int>;
friend int Get<int>( const int&);
private:
static T a;
};
int MyClass<int>::a = 10;
template<class T>
class MyClass1
{
public:
MyClass1();
~MyClass1();
T Get();
private:
};
template<>
MyClass1<int>::MyClass1()
{
}
template<>
MyClass1<int>::~MyClass1()
{
}
template<>
int MyClass1<int>::Get()
{
MyClass<int> (mc);
return mc.a;
}
template<class T>
int Get( const int&nNum)
{
MyClass<int> (mc);
return mc.a + nNum;
}
int _tmain(int argc, _TCHAR* argv[])
{
int n = Get<int>(123);
cout<<n<<endl;
MyClass1<int>(mc1);
n = mc1.Get();
cout<<n<<endl;
return 0;
}
//
#include "stdafx.h"
#include <iostream>
using namespace std;
template<class T>class MyClass1;
template<class T>T Get(const T&);
template<class T>
class MyClass
{
public:
MyClass();
~MyClass();
friend class MyClass1<int>;
friend T Get<>(const T&);
private:
const static int i = 10;
};
MyClass<int>::MyClass()
{
}
MyClass<int>::~MyClass()
{
}
template<class T>
int Get<>(const int &a)
{
MyClass<int> (mc);
return a + mc.i;
}
template<class T>
class MyClass1
{
public:
MyClass1();
~MyClass1();
int Get();
private:
};
MyClass1<int>::MyClass1()
{
}
MyClass1<int>::~MyClass1()
{
}
int MyClass1<int>::Get()
{
MyClass<int>(mc);
return mc.i;
}
int _tmain(int argc, _TCHAR* argv[])
{
int n = Get<int>(123);
cout<<n<<endl;
MyClass1<int>(mc);
n = mc.Get();
cout<<n<<endl;
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。