前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c++模板使用

c++模板使用

作者头像
sofu456
发布2022-05-10 19:22:20
7110
发布2022-05-10 19:22:20
举报
文章被收录于专栏:sofu456sofu456

template

  • 类模板,类模板成员实现在头文件中
代码语言:javascript
复制
template <typename T>
class MyPair{
    T value[2];
};
  • 函数模板
代码语言:javascript
复制
template <typename T>
T GetMax(T a, T b){
    return a > b ? a : b;
}
  • 模板特例化

模板特例化和模板重载函数可以共存,编译期针对不同的数据类型,生成多个版本的函数,c++11之后可以使用constexpr常量表达式,写编译期代码

代码语言:javascript
复制
template <>
class MyPair<int>{
    int value[2];
};
  • 模板可变参数以及成员递归
代码语言:javascript
复制
template <typename T>
int Size(T a){
    return 1;
}
template <typename S,typename... T>
int Size(S a, T... b){
    return Size(b...)+1;
}

int ii = Size(1,2,4,5);   //size= 4

模板作为参数

类模板参数

代码语言:javascript
复制
template <template <typename T> class Thing>
class Crab{}

Crab<Stack>  a;//使用模板作为类模板

函数模板参数

代码语言:javascript
复制
template<typename... Args>
void init(int maxsize, Args&&... args){
    std::call_once(flag_, &connection_pool<DB>::template init_impl<Args...>, this, maxsize, std::forward<Args>(args)...);
}
template<typename... Args>
void init_impl(int maxsize, Args&&... args){}

编译期类型判断

std::decay<vector>::type::value_type 获取vector内部的类型 std::is_same_v<T, bool&> 变量 std::remove_reference::type 变量 std::enable_if<condition>::type 条件满足返回类型,不满足无类型编译错 decltype 编译期获取变量类型 std::declval 推到模板T的对象值 if constexpr () 编译期的条件判断,根据constexpr内部生成多条代码

模板执行在编译器,所以模板成员只要传入的参数匹配,写固定的成员变量,只要编译过了也是可以的

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • template
  • 模板作为参数
  • 编译期类型判断
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档