马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
为啥没有使用具体化模板?#include <iostream>
class Cg
{
public:
template<typename T>
Cg(const T t)
{
std::cout << t << '\n';
}
int a;
};
//template<typename T1,typename T2>
//void uu(T1 A, T2 B)
//{
// std::cout << A << B << '\n';
//}
//
//template<typename T1, typename T2>
//void uu(T1 A, T2 B,int c)
//{
// std::cout << A << B <<c<< '\n';
//}
template<typename T>
void swap(T a, T b)
{
std::cout << "使用模板\n";
a = b;
}
template<> void swap(Cg& g1, Cg& g2)
{
std::cout << "使用具体化模板\n";
g1.a = g2.a;
}
int main()
{
//Cg g("aaaaaaaaa");
//uu<int,std::string>(1, "a");
//uu(1, 2, 3);
Cg g1("a"), g2("b");
swap(g1, g2);
}
打印结果是这样:a
b
使用模板
C:\Users\Administrator\source\repos\函数模板\x64\Debug\函数模板.exe (进程 1048)已退出,代码为 0。
按任意键关闭此窗口. . .
嘿,鱼油!你问了个好问题,来咯,老司给你解答!你在代码里说的“具体化模板”其实是“模板特化”。模板特化是C++里面的一个高级小技巧,能让你对不同的模板参数做出特别的实现。
不过,看你的代码,可能不是很明白怎么使用模板特化。没事儿,先别急,我给你改进一下并解释清楚:
首先,你现在定义了一个类`Cg`和一个模板构造函数,但是没有进行特化。那我们先给你一个标准模板形式吧!
#include <iostream>
class Cg
{
public:
template<typename T>
Cg(const T t)
{
std::cout << "Generic template constructor: " << t << std::endl;
}
};
// 对于整数类型的特化
template<>
Cg::Cg<int>(const int t)
{
std::cout << "Specialized template constructor for int: " << t << std::endl;
}
// 对于字符串类型的特化(假设传入字符串常量)
template<>
Cg::Cg<const char*>(const char* t)
{
std::cout << "Specialized template constructor for const char*: " << t << std::endl;
}
int main()
{
Cg obj1(42); // 这会调用整数特化版本
Cg obj2("FishC"); // 这会调用字符串特化版本
Cg obj3(3.14); // 这会调用通用模板版本
return 0;
}
简单来说,那个模板特化就像是一个VIP通道,只为某些特定类型服务,而其他类型都走普通线路。这就厉害了,你可以为每一种特定类型写一个特别的实现,以处理不同的数据类型需求,简直就是超市里的万能收银员,啥都能扫!
希望这个例子能帮你理解模板特化的用途,有啥问题继续抛过来,老司在线等你哦!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|