当前位置: 首页 > news >正文

C++模板语法大全

C++模板语法大全

1. 函数模板

基本语法

template <typename T>
T max(T a, T b) {return (a > b) ? a : b;
}

多类型参数

template <typename T, typename U>
auto add(T a, U b) -> decltype(a + b) {return a + b;
}

显式实例化

template int max<int>(int, int);

模板参数推导

auto result = max(5, 10);  // 推导为int

2. 类模板

基本语法

template <typename T>
class Stack {
private:std::vector<T> elements;
public:void push(const T& element);T pop();
};

成员函数定义

template <typename T>
void Stack<T>::push(const T& element) {elements.push_back(element);
}

静态成员

template <typename T>
class MyClass {
public:static int count;
};template <typename T>
int MyClass<T>::count = 0;

3. 非类型模板参数

template <typename T, int size>
class Array {
private:T data[size];
public:T& operator[](int index);
};

4. 模板特化

全特化

template <>
class Stack<bool> {// 针对bool类型的特殊实现
};

偏特化

template <typename T>
class Stack<T*> {// 针对指针类型的特殊实现
};

5. 可变参数模板

template <typename... Args>
void print(Args... args) {(std::cout << ... << args) << '\n';  // 折叠表达式(C++17)
}

6. 模板别名

template <typename T>
using Vec = std::vector<T>;Vec<int> v;  // 等价于 std::vector<int>

7. 模板约束(C++20)

概念(Concepts)

template <typename T>
concept Integral = std::is_integral_v<T>;template <Integral T>
T square(T x) {return x * x;
}

requires子句

template <typename T>
requires std::is_integral_v<T>
T increment(T x) {return x + 1;
}

8. 模板元编程

编译时计算

template <int N>
struct Factorial {static const int value = N * Factorial<N-1>::value;
};template <>
struct Factorial<0> {static const int value = 1;
};

SFINAE (替换失败不是错误)

template <typename T>
auto test(T x) -> decltype(x.serialize(), void()) {// 只有当T有serialize()方法时才匹配
}

9. 模板友元

template <typename T>
class MyClass {friend void foo(MyClass<T> obj) {// 可以访问MyClass的私有成员}
};

10. 模板默认参数

template <typename T = int, int size = 10>
class Buffer {// ...
};

11. 模板继承

template <typename T>
class Base {};template <typename T>
class Derived : public Base<T> {};

12. 模板与虚函数

template <typename T>
class Base {
public:virtual void process(T value) = 0;
};class Derived : public Base<int> {
public:void process(int value) override {}
};

13. 模板中的嵌套类型

template <typename T>
class Outer {
public:template <typename U>class Inner {// ...};
};

14. 模板模板参数

template <template <typename> class Container, typename T>
class Wrapper {Container<T> data;
};

15. Lambda表达式模板(C++20)

auto lambda = []<typename T>(T x) { return x * 2; };

16. 模板中的constexpr

template <typename T, int N>
constexpr int array_size(T (&)[N]) {return N;
}

17. 模板中的decltype和auto

template <typename T, typename U>
auto multiply(T x, U y) -> decltype(x * y) {return x * y;
}

18. 完美转发模板

template <typename T>
void wrapper(T&& arg) {process(std::forward<T>(arg));
}

19. 模板中的异常规范

template <typename T>
void func() noexcept(std::is_nothrow_copy_constructible_v<T>) {}

20. 模板中的静态断言

template <typename T>
void process(T value) {static_assert(std::is_integral_v<T>, "T must be integral");
}

这些是C++模板的主要语法和特性,涵盖了从基础到高级的用法。C++20引入的概念(Concepts)极大地改进了模板编程的可用性和错误消息的可读性。

http://www.xdnf.cn/news/701173.html

相关文章:

  • Rust 的Hello World
  • 在qt中使用c++实现与Twincat3 PLC变量通信
  • 知行之桥如何将消息推送到钉钉群?
  • 前端面经 hook 获取dom元素
  • Cookie与Session简介-笔记
  • 代谢测定试剂盒_生化制剂_Sigma-Aldrich®实验室用品及生产材料
  • FastApi学习
  • AMBA-AHB的控制信号
  • jenkins部署slave动态节点
  • java 开发中 nps的内网穿透 再git 远程访问 以及第三放支付接口本地调试中的作用
  • 使用 find 遍历软链接目录时,为什么必须加 -L
  • 华为OD最新机试真题-按单词下标区间翻转文章内容-OD统一考试(B卷)
  • 【案例95】“小”问题引发的“大”发现---记一次环境修复
  • 十六进制数据转换为对应的字符串
  • Python 如何让自动驾驶的“眼睛”和“大脑”真正融合?——传感器数据融合的关键技术解析
  • Java+POI+EXCEL导出柱形图(多列和单列柱形图)
  • 外骨骼驾驶舱HOMIE——3500元让人形机器人1:1复刻人类动作:类似Mobile ALOHA主从臂的主从分离版
  • 深度学习入门:从零搭建你的第一个神经网络
  • Vue3对接deepseek实现ai对话
  • 系统性学习C语言-第十讲-操作符详讲
  • javascript中运算符的优先级
  • 如何把示例数据0.617、0.229、0.174保留两位小数,并在后面添加%处理,处理后的结果如下:61.7%、22.9%、17.4%
  • Java | 韩顺平 循序渐进学Java自用笔记---OOP高级(二)
  • Kaggle-基于xgboost的销量预测
  • Java基础 Day23
  • ROC和生存曲线的绘制-spss
  • 精准监测,健康无忧--XC3576H工控主板赋能亚健康检测仪
  • 数据库相关面试
  • 74道TypeScript高频题整理(附答案背诵版)
  • Python解析DOC文档表格