C++ 模板编程详解:从基础到元编程

显式指定类型

代码语言:javascript

AI代码解释

cpp复制编辑max_value<double>(3, 5); // 显式要求用 double

三、类模板

3.1 基本用法

代码语言:javascript

AI代码解释

cpp复制编辑template <typename T> class Box { T value; public: Box(T val) : value(val) {} T get() const { return value; } };

使用方式:

代码语言:javascript

AI代码解释

cpp复制编辑Box<int> b1(10); Box<std::string> b2("Hello");

四、模板的高级特性

4.1 多个模板参数

代码语言:javascript

AI代码解释

cpp复制编辑template <typename T, typename U> class Pair { public: T first; U second; };
4.2 模板默认参数

代码语言:javascript

AI代码解释

cpp复制编辑template <typename T = int> class MyContainer { T data; };
4.3 模板函数重载与 SFINAE

SFINAE(Substitution Failure Is Not An Error)用于控制模板重载选择:

代码语言:javascript

AI代码解释

cpp复制编辑template<typename T> auto print(T t) -> decltype(t.begin(), void()) { std::cout << "Range type\n"; } template<typename T> void print(T t) { std::cout << "Value type\n"; }

五、模板特化与偏特化

5.1 全特化

代码语言:javascript

AI代码解释

cpp复制编辑template <> class Box<bool> { public: void info() { std::cout << "Specialized for bool\n"; } };
5.2 偏特化

代码语言:javascript

AI代码解释

cpp复制编辑template <typename T> class Wrapper<T*> { public: void print() { std::cout << "Pointer type\n"; } };

偏特化在处理指针、数组、const 类型等非常有用。


六、模板实例化与编译机制

模板是在编译期间根据使用方式实例化的。

示例:

代码语言:javascript

AI代码解释

cpp复制编辑Box<int> b1(1); // 编译器生成 Box<int> Box<double> b2(2.3); // 另一个版本 Box<double>

注意:模板定义必须在头文件中,否则无法多处引用(因为实例化依赖定义)。


七、模板元编程(Template Metaprogramming)

模板元编程是一种在编译期进行计算和逻辑判断的技术。它允许构建静态递归、类型选择器、条件逻辑等。

7.1 编译期阶乘

代码语言:javascript

AI代码解释

cpp复制编辑template <int N> struct Factorial { static const int value = N * Factorial<N - 1>::value; }; template <> struct Factorial<0> { static const int value = 1; }; // 使用 int x = Factorial<5>::value; // 120
7.2 类型萃取(Type Traits)

代码语言:javascript

AI代码解释

cpp复制编辑template <typename T> struct is_pointer { static const bool value = false; }; template <typename T> struct is_pointer<T*> { static const bool value = true; };

C++11 提供标准类型萃取头 <type_traits>,如:

代码语言:javascript

AI代码解释

cpp复制编辑std::is_same<int, int>::value // true std::is_pointer<int*>::value // true

八、可变参数模板(Variadic Templates)

C++11 起支持不定参数模板:

代码语言:javascript

AI代码解释

cpp复制编辑template <typename T, typename... Args> void print_all(T first, Args... rest) { std::cout << first << "\n"; print_all(rest...); } void print_all() {} // 递归终止条件

用于构建灵活的接口,如 std::tuple, std::make_shared 背后的技术。


九、折叠表达式(C++17)

C++17 引入“折叠表达式”简化可变参数操作:

代码语言:javascript

AI代码解释

cpp复制编辑template<typename... Args> auto sum(Args... args) { return (... + args); // 折叠为 args1 + args2 + ... }

十、模板与 STL 设计

STL 库几乎完全基于模板构建:

  • std::vector<T>:模板类
  • std::sort<Iterator>:模板函数
  • std::enable_if:模板条件选择器

正因为模板,STL 实现了“零运行时开销”的泛型编程。

Read more

Stable-Diffusion-v1-5-archive性能压测报告:QPS/延迟/显存占用三维度实测

Stable-Diffusion-v1-5-archive性能压测报告:QPS/延迟/显存占用三维度实测 想了解一个AI模型到底“快不快”、“稳不稳”、“贵不贵”?光看功能介绍可不够。今天,我们就拿经典的Stable Diffusion v1.5 Archive模型开刀,进行一次全方位的性能“体检”。我们将从三个核心维度——每秒处理能力(QPS)、响应延迟和显存占用——来实测它的表现,看看这个老牌文生图模型在今天的技术环境下,究竟实力如何。 1. 压测目标与方法论 在开始之前,我们先明确这次压测要回答的几个关键问题: 1. 极限性能:在单张GPU上,这个模型最高能承受多大的并发请求压力? 2. 响应速度:从用户提交请求到拿到图片,平均需要等待多久? 3. 资源消耗:运行这个服务,到底需要吃掉多少显存?成本高不高? 4. 稳定性:在高负载下,服务会不会崩溃?生成质量会不会下降? 为了回答这些问题,我们设计了一套压测方案。测试环境基于一台配备了单张NVIDIA RTX

By Ne0inhk
【花雕学编程】Arduino BLDC 之自主巡逻机器人(避障+路径规划)

【花雕学编程】Arduino BLDC 之自主巡逻机器人(避障+路径规划)

基于 Arduino 的无刷直流电机(BLDC)自主巡逻机器人(避障+路径规划),是一个融合了高效动力系统、多传感器环境感知、嵌入式实时计算与智能决策算法的复杂移动机器人系统。它旨在替代人工在预设或未知环境中进行长时间、高效率的巡查任务,通过 BLDC 电机提供持久且敏捷的驱动力,并利用算法实现环境理解与自主导航。 1、主要特点 高效长续航 BLDC 驱动系统 BLDC 电机是巡逻机器人的“心脏”,决定了其机动性与作业时长。 高效率与长续航: 相较于有刷电机,BLDC 电机效率通常高于 85%,发热量低。配合电子调速器(ESC)的 FOC(磁场定向控制)算法,能最大限度地利用电池能量,确保机器人能够持续工作 8 小时甚至更长时间,满足长时间巡逻的需求。 高动态响应: 巡逻过程中常需急停、避让行人或车辆。BLDC 电机具备快速启停和快速加减速的能力,配合差速转向底盘,能迅速响应避障算法发出的紧急制动或转向指令,保证运行安全。

By Ne0inhk
【硬核实战】Mac mini M4 部署 OpenClaw + Ollama 本地大模型:从零到一打通飞书机器人

【硬核实战】Mac mini M4 部署 OpenClaw + Ollama 本地大模型:从零到一打通飞书机器人

文章目录 * 一、 核心环境准备 * 二、 避坑指南:环境初始化在 Mac 终端部署时,首要解决的是权限与路径问题。 * 1. 终端常用快捷键* `Control + C`:强制停止当前运行的命令(如安装卡死时)。 * 2. Node.js 环境修复若遇到 `zsh: command not found: openclaw`,说明 NVM 路径未加载。 * 3. 临时加载环境 * 4. 永久写入配置 * 三、 模型选择:M4 性能调优 * 四、 OpenClaw 配置手术 (JSON 详解) * 五、 飞书机器人接入:最后的临门一脚 * 六、 运行与调试 * 启动 Gateway * 第一次发消息需授权 (Pairing) * 💡 结语

By Ne0inhk
低空经济新实践:无人机如何革新光伏电站巡检

低空经济新实践:无人机如何革新光伏电站巡检

引言:当低空经济遇见新能源革命 在“双碳”战略引领下,光伏电站如雨后春笋般遍布神州大地。截至2023年底,我国光伏发电装机容量已突破6亿千瓦,连续多年位居全球首位。然而,随着光伏电站规模的急剧扩大,传统人工巡检方式已难以满足高效、精准的运维需求。此时,低空经济的崛起为这一痛点带来了创新解法——无人机光伏巡检技术正在重新定义新能源设施的运维模式。 一、传统光伏巡检之困:低效、高风险、不精准 传统光伏巡检主要依赖人工方式,运维人员需要手持红外热像仪等设备,在光伏板阵列中徒步检查。这种方式存在明显短板: 1. 效率低下:一个100MW的光伏电站,人工全面巡检往往需要数周时间 2. 安全风险:高温、高电压环境下作业,人员安全隐患不容忽视 3. 漏检率高:人工目视检查难以发现细微缺陷,问题检出率通常不足70% 4. 数据离散:检查结果依赖个人经验,难以形成标准化数据资产 二、无人机智能巡检系统架构 现代无人机光伏巡检已形成完整的系统解决方案,主要由以下核心模块组成: 2.1 硬件配置 * 飞行平台:

By Ne0inhk