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

单位如何做网站宣传高端网站建设专业营销团队

单位如何做网站宣传,高端网站建设专业营销团队,黄金多少钱一克,坪山网站开发1. 什么是类模板类模板(class template)是 “类型的模板”——它将一个或多个类型参数或非类型参数抽象出来,让一个“通用的类框架”能在编译期被实例化成针对不同类型或不同值的具体类。作用:通用代码复用、静态多态、在容器&…

1. 什么是类模板

  • 类模板(class template)是 “类型的模板”——它将一个或多个类型参数非类型参数抽象出来,让一个“通用的类框架”能在编译期被实例化成针对不同类型或不同值的具体类。

  • 作用:通用代码复用静态多态在容器/工具类实现中最常见


2. 基本语法

// 声明一个带 1 个类型参数 T 的类模板
template <typename T>        
class MyClass {
public:// 成员变量T value;// 构造函数MyClass(const T& v) : value(v) {}// 成员函数void print() const {std::cout << value << std::endl;}
};
  • template <typename T>:告诉编译器,接下来定义的是一个类模板,T 是一个占位类型

  • MyClass<T>:当你写 MyClass<int> 时,编译器会 生成一个名为 MyClass 的实际类


3. 如何使用(实例化)

int main() {// 1) 指定类型参数MyClass<int>  mi(42);mi.print();             // 输出 42MyClass<std::string> ms("Hello");ms.print();             // 输出 Hello// 2) C++17 结构化绑定 + CTAD(类模板参数推导)MyClass m2(3.14);       // 自动推断 T 为 doublem2.print();             // 输出 3.14
}
  • 显式实例化MyClass<int>MyClass<std::string> 都是针对不同类型生成的“真实类”。

  • CTAD(Class Template Argument Deduction):C++17 起,如果构造函数参数能唯一推断模板参数,就可以省略 <...>


4. 多模板参数与非类型模板参数

4.1 多类型参数

template <typename Key, typename Value>
class Pair {
public:Key   first;Value second;Pair(const Key& k, const Value& v) : first(k), second(v) {}
};

使用:

Pair<std::string,int>  p("age", 30);
std::cout << p.first << ": " << p.second << std::endl;

4.2 非类型模板参数

// size 是一个整型常量(编译期已知)
template <typename T, int size>
class FixedArray {T data[size];
public:T& operator[](int i) { return data[i]; }int getSize() const { return size; }
};

使用:

FixedArray<double, 5> arr;
for(int i = 0; i < arr.getSize(); ++i)arr[i] = i * 1.1;

5. 模板的实现分离

  • 头文件.hpp.h 中同时放声明定义,或者

  • .h:声明 + #include "MyClass.tpp"
    .tpp:模板定义(实现)
    因为模板必须在使用点可见实现,才能实例化。

// MyClass.hpp
#pragma once
template<typename T>
class MyClass {T v;
public:MyClass(const T&);void print() const;
};
#include "MyClass.tpp"// MyClass.tpp
#include <iostream>
template<typename T>
MyClass<T>::MyClass(const T& _v) : v(_v) {}
template<typename T>
void MyClass<T>::print() const {std::cout << v << std::endl;
}

6. 模板特化

6.1 完全特化(full specialization)

对某个具体类型做专门实现:

// 通用版本
template<typename T>
struct TypeName { static std::string name() { return "Unknown"; } };// 针对 int 完全特化
template<>
struct TypeName<int> { static std::string name() { return "int"; } };// 用法
std::cout << TypeName<double>::name(); // Unknown
std::cout << TypeName<int>::name();    // int

6.2 偏特化(partial specialization)

对一组类型做专门实现(只针对模板类,函数模板不支持偏特化):

// 针对指针类型的偏特化
template<typename T>
struct TypeName<T*> {static std::string name() { return TypeName<T>::name() + "*"; }
};// 用法
std::cout << TypeName<int*>::name();   // int*

7. 模板模板参数(更高级)

允许把“模板本身”作为参数:

template< template<typename> class Container, typename T >
class Wrapper {Container<T> c;
public:void add(const T& v) { c.insert(c.end(), v); }
};// 使用 vector 作为 Container 模板
Wrapper<std::vector, int> w;
w.add(10);

8. 小结与注意事项

  1. 模板是在编译期展开:每种参数组合都会生成独立代码,可能导致可执行文件变大。

  2. 定义与声明要都可见:否则编译器无法实例化。

  3. 特化:完全特化和偏特化用法不同,偏特化只适用于类模板。

  4. CTAD:C++17 支持类模板参数推导,调用时可省略模板参数列表。

  5. 避免虚函数+模板:模板类加虚函数会多一层复杂度,按需使用。

http://www.dtcms.com/a/536748.html

相关文章:

  • 建设企业网站步骤上海做网站的公司是什么
  • 系统接口对接如何设计预防处理系统异常?
  • LeetCode算法日记 - Day 85: 等差数列划分
  • Maven相关
  • 京东商品视频API:通过商品id商品链接获取商品的视频url
  • Maven快速上手笔记
  • 手机免费制作网站模板免费下载台州网站公司那里好
  • 企业网站哪家好网站流量超标
  • 钢结构网站建设网站建设必备
  • 数据分析综合应用实战:从统计分析到机器学习预测
  • 网站 源码 下载色无极网站正在建设中
  • 【测试理论和实践 2.测试概念】
  • 算法 day 36
  • 【论文阅读】图数据库 Survey: Graph Databases
  • 长沙优化网站关键词合肥政务新区建设局网站
  • 化学网站定制简网app工场怎么创app
  • 今天我们学习Linux架构中的Redis数据库基础
  • 网站商城系统教资报名网站设置
  • 引入实时 3D 渲染技术,地平线与 Unity 开启车载交互空间化时代
  • 用狸窝转换器转换视频后文件变大的问题排查
  • Ansible自动化部署Harbor私有仓库指南④
  • AI模型开发 | 基于AutoDL部署Deepseek OCR模型,从零打造OCR应用平台
  • 网站建设微金手指下拉15价目表app制作
  • 基于深度学习的户口本识别技术通过智能图像处理、文字定位和语义理解,实现99%以上的高精度识别
  • 在线视频教育网站开发公司注册资金最低多少
  • JVM学习第一章
  • Promise 详解
  • [nanoGPT] 性能与效率 | `torch.compile()` |`Flash Attention`|`混合精度训练`|`estimate_mfu`
  • 异常日志不打印堆栈?谈谈 JVM 的 Fast Throw
  • docker wordpressseo插件wordpress