模板特化的多维度挖掘
假如我有一个需求,就是如果传入的参数是int类型,我就输出int类型,否则就输出T。很显然,根据模板的基础知识,我们可以这么写
template <class T>
void f(T) {
std::cout << "T\n";
}
template <>
void f(int) {
std::cout << "int\n";
}
除了这样写,还有别的写法吗。我们可以思考一下.................这里我们其实可以用std::enable_if_t来实现,它相当于给std::enable_if的type类型起了一个别名,我们先看怎么写。
template <class T>
std::enable_if_t<std::is_same_v<int, T>> g(T) {
std::cout << "int\n";
}
template <class T>
std::enable_if_t<!std::is_same_v<int, T>> g(T) {
std::cout << "T\n";
}
假设我现在再提一个需求,就是只能实现一个函数,且只能接受int类型的参数,其它类型均不能通过编译。这时候如果你仅仅单纯地void f(int),那么即便你传入double类型进来,它也会发生类型转换并执行这个函数,这并不是我们想要的。因此,我们可以考虑用std::enable_if_t来实现。
template <class T>
std::enable_if_t<std::is_same_v<int, T>> h(T) {
std::cout << "strictly int\n";
}
好的,事情到这里结束。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库