一个函数模板里的问题,请帮忙,谢谢

来源:百度知道 编辑:UC知道 时间:2024/05/30 04:48:45
#include<iostream>
using namespace std;
struct stu
{
int av;
int age;
};

template<> void gg<stu>(stu a)//template <> void abc<stu>(stu a,stu b)
{
cout <<"a.av=" << a.av <<endl;
}

template <typename T> void gg(T a)
{
cout <<"a=" <<a <<endl;
}
int main(int argc, char *argv[])
{
gg(78);
gg('a');
cout <<"\n" <<endl;

stu tt={23,45};
gg(tt);

return 0;
}
//当调用模板显示具体化时总是出错

在特例化时没有发现通用模版定义,函数次序不对:
应为:
template <typename T> void gg(T a)
{
cout <<"a=" <<a <<endl;
}
template<> void gg(stu a)
{
cout <<"a.av=" << a.av <<endl;
}
另外,带两个参数的没有通用的模版函数定义,则只能为:
template<typename T> void gg(T a, T b)
{
cout <<"a.av=" << a.av <<endl;
}
即:特例化之前必须要知道通用模版函数定义!