成员函数的全特化(不是类模板全特化和函数模板全特化)
#include "pch.h"
#include "test.h"
#include <iostream>
#include <map>
using namespace std;
//泛化版本
template<typename T,typename U>
struct A
{
A()
{
cout << "泛化A()" << endl;
}
void func()
{
cout<<"泛化void func()"<<endl;
}
};
//偏特化版本
template<typename U> //针对于类模板的偏特化,T是char类型时,希望实例化的是该偏特化的版本
struct A<char,U>
{
A()
{
cout << "偏特化A<char,U>" << endl;
}
void func()
{
cout << "偏特化void func()" << endl;
}
};
//类模板全特化,如果T和U都是int类型,那就实例化该全特化版本
template<>
struct A<int,int>
{
A()
{
cout << "全特化A<int,int>" << endl;
}
void func()
{
cout << "全特化void func()" << endl;
}
};
//成员函数全特化
template<>
void A<double,int>::func()
{
cout << "全特化void func()" << endl;
}
//成员函数偏特化,不可以
/*template<typename U>
void A<char,U>::func()
{
cout << "全特化void func()" << endl;
}
*/
int main()
{
A<double, int> obj; //实例化的是泛化版本的类
obj.func();//调用的是成员函数偏特化
return 0;
}