网站的公告轮播效果怎么做,河北建设秦皇岛分公司,wordpress 修改站点,做目录网站注意函数模板优点是通用性#xff0c;可以解决某个方面的普遍性问题#xff0c;但是这个世界上的事情不是绝对的#xff0c;有普遍的#xff0c;就有绝对的。举个栗子#xff1a;
#include iostream
using namespace std;
template typename T
void Swap(T 可以解决某个方面的普遍性问题但是这个世界上的事情不是绝对的有普遍的就有绝对的。举个栗子
#include iostream
using namespace std;
template typename T
void Swap(T a,T b) {T temp a;a b;b temp;return ;
}
class CGirl {public:int m_bk;//编号string m_name; //姓名int m_rank; //排名
};int main() {return 0;
}
我要是只想用这个Swap函数交换超女类的排名不交换其他成员这样的话swap函数模板中现有的代码就不合适了
——————————————————————————————————————————
为了满足特殊的需求可以提供一个具体化的函数当编译器找到与函数调用匹配的具体化定义时将使用该定义不再寻找模板。————函数模板的具体化
语法
template void 函数模板名 (参数列表)
{
//函数体
}
#include iostream
using namespace std;class CGirl {public:int m_bk;//编号string m_name; //姓名int m_rank; //排名
};
template typename T
void Swap(T a,T b) {T temp a;a b;b temp;return ;
}
//具体化函数
template void SwapCGirl(CGirl g1, CGirl g2)
//template void Swap(CGirl g1, CGirl g2) 这两种方法是一样的
{int temp g1.m_rank;g1.m_rank g2.m_rank;g2.m_rank temp;cout 带哦用的SwapCGirl g1CGirl g2\n;return ;
}int main() {int a 10, b 20;Swap(a, b);cout a a , b b endl;CGirl g1, g2;g1.m_rank 1;g2.m_rank 2;Swap(g1, g2);cout g1.m_rank g1.m_rank , g2.m_rank g2.m_rank endl;return 0;
}
对于给定的函数名可以有普通函数函数模板和具体化的函数模板以及他们的重载版本
编译器用用各种函数的规则
1具体化优先于常规模板普通函数优先于具体化和常规模板
2如果希望使用函数模板可以用空模板参数强制使用函数模板
3如果函数模板能产生更好的匹配将优先于普通函数。
#include iostream
using namespace std;void Swap(int a , int b) {cout 使用了普通函数。\n;
}
template typename T
void Swap(T a,T b) {cout 使用了函数模板。\n;
}
//具体化函数
template
void Swap(int a,int b)
{cout 使用了具体化的函数模板。\n;
}int main() {Swap(1, 2);return 0;
}
普通函数优先于函数模板所以编译器选择第一个普通函数
使用了普通函数。C:\Users\代伟业\Desktop\C\初始化列表\this指针\x64\Debug\this指针.exe (进程 23260)已退出代码为 0。
按任意键关闭此窗口. . .
如果把普通函数注释掉选择了具体化的函数模板
#include iostream
using namespace std;//void Swap(int a , int b) {
// cout 使用了普通函数。\n;
//}
template typename T
void Swap(T a,T b) {cout 使用了函数模板。\n;
}
//具体化函数
template
void Swap(int a,int b)
{cout 使用了具体化的函数模板。\n;
}int main() {Swap(1, 2);return 0;
}
使用了具体化的函数模板。C:\Users\代伟业\Desktop\C\初始化列表\this指针\x64\Debug\this指针.exe (进程 13556)已退出代码为 0。
按任意键关闭此窗口. . .
如果把具体化版本的代码注释掉再运行只能使用函数模板了
#include iostream
using namespace std;//void Swap(int a , int b) {
// cout 使用了普通函数。\n;
//}
template typename T
void Swap(T a,T b) {cout 使用了函数模板。\n;
}
//具体化函数
//template
//void Swap(int a,int b)
//{
// cout 使用了具体化的函数模板。\n;
//}int main() {Swap(1, 2);return 0;
}
使用了函数模板。C:\Users\代伟业\Desktop\C\初始化列表\this指针\x64\Debug\this指针.exe (进程 21920)已退出代码为 0。
按任意键关闭此窗口. . .
----------
如果不想使用普通函数想使用函数模板可以加空模板参数
#include iostream
using namespace std;void Swap(int a , int b) {cout 使用了普通函数。\n;
}
template typename T
void Swap(T a, T b) {cout 使用了函数模板。\n;
}
//具体化函数
template
void Swap(int a,int b)
{cout 使用了具体化的函数模板。\n;
}int main() {Swap(1, 2);return 0;
}
使用了具体化的函数模板。C:\Users\代伟业\Desktop\C\初始化列表\this指针\x64\Debug\this指针.exe (进程 23204)已退出代码为 0。
按任意键关闭此窗口. . .
如果把具体化版本的代码注释掉再运行只能使用函数模板了