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

微信分享网站短链接怎么做的教育培训网站

微信分享网站短链接怎么做的,教育培训网站,网站建设的发展,厦门百度seo类型擦除(Type Erasure)和模板特化(Template Specialization)是 C 中两个非常强大的泛型编程机制。它们可以分别用于构建灵活的抽象接口和控制模板行为。我们将分别讲解这两个机制的原理、用法以及结合应用示例。 一、类型擦除&am…

类型擦除(Type Erasure)和模板特化(Template Specialization)是 C++ 中两个非常强大的泛型编程机制。它们可以分别用于构建灵活的抽象接口和控制模板行为。我们将分别讲解这两个机制的原理用法以及结合应用示例


一、类型擦除(Type Erasure)

原理概念

类型擦除是一种设计技巧,用于隐藏类型信息而保留其行为,使得用户代码可以操作任意类型的对象,只要它满足某些接口要求。例如:

  • 标准库中的 std::function
  • std::any / std::variant
  • 自定义泛型容器 / 接口桥接器

示例:模拟 std::function 的类型擦除

实现一个 AnyCallable,它可以存储任意可调用对象(函数、lambda、仿函数等)。

#include <iostream>
#include <memory>class AnyCallable {
public:// 构造函数模板,接受任意可调用对象template<typename Callable>AnyCallable(Callable func) : obj_(std::make_unique<Model<Callable>>(std::move(func))) {}// 调用包装的函数void operator()() const {obj_->call();}private:struct Concept {virtual ~Concept() = default;virtual void call() const = 0;};template<typename Callable>struct Model : Concept {Callable func_;Model(Callable f) : func_(std::move(f)) {}void call() const override {func_();}};std::unique_ptr<Concept> obj_;
};int main() {AnyCallable f1 = []() { std::cout << "Hello Lambda\n"; };AnyCallable f2 = []() { std::cout << "Another function\n"; };f1();f2();return 0;
}

重点:

  • Concept 是一个抽象基类(接口)
  • Model<T> 是具体类型实现,模板化实现任意类型
  • 所有类型都被“擦除”成 Concept* 接口操作

二、模板特化(Template Specialization)

模板特化是控制模板行为的工具,可以为特定类型或条件提供特殊实现

分类:

  • 全特化(Full Specialization)
  • 偏特化(Partial Specialization)
  • SFINAE/std::enable_if/constexpr if 条件特化

示例 1:全特化

template<typename T>
struct Printer {void print() { std::cout << "Generic type\n"; }
};template<>
struct Printer<int> {void print() { std::cout << "Int specialization\n"; }
};int main() {Printer<double>().print();  // GenericPrinter<int>().print();     // Int specialization
}

示例 2:偏特化

template<typename T1, typename T2>
struct Pair {};template<typename T>
struct Pair<T, int> {void print() { std::cout << "Second is int\n"; }
};int main() {Pair<double, int>().print();  // Second is int
}

三、二者结合:类型擦除 + 模板特化示例

用一个统一接口 PointContainer 来封装不同类型的点云容器(如 std::vector<Eigen::Vector3d>pcl::PointCloud<pcl::PointXYZ>等),并通过特化获取其大小、访问等。

示例:简化版点容器类型擦除 + 特化访问器

#include <iostream>
#include <vector>
#include <memory>
#include <Eigen/Dense>// 类型擦除接口
class IPointContainer {
public:virtual ~IPointContainer() = default;virtual size_t size() const = 0;virtual Eigen::Vector3d point(size_t i) const = 0;
};// 模板实现(通过特化支持不同容器)
template<typename T>
class PointContainerImpl : public IPointContainer {
public:PointContainerImpl(T data) : data_(std::move(data)) {}size_t size() const override {return traits<T>::size(data_);}Eigen::Vector3d point(size_t i) const override {return traits<T>::point(data_, i);}private:T data_;
};// traits 特化
template<typename T>
struct traits;template<>
struct traits<std::vector<Eigen::Vector3d>> {static size_t size(const std::vector<Eigen::Vector3d>& v) {return v.size();}static Eigen::Vector3d point(const std::vector<Eigen::Vector3d>& v, size_t i) {return v[i];}
};// 使用统一接口
int main() {std::vector<Eigen::Vector3d> pts = {{1, 2, 3},{4, 5, 6}};std::unique_ptr<IPointContainer> container = std::make_unique<PointContainerImpl<std::vector<Eigen::Vector3d>>>(pts);for (size_t i = 0; i < container->size(); ++i) {std::cout << "Point: " << container->point(i).transpose() << "\n";}
}

总结对比:

特性类型擦除模板特化
目的抽象接口,隐藏实现类型为特定类型提供自定义实现
实现机制虚函数 + 模板组合template<> / std::enable_if
灵活性高,运行时处理多种类型高,编译期选择不同实现
成本有运行时开销(虚函数)无运行时开销,编译期展开
使用场景插件式架构、多态容器、API封装数值类型优化、特例算法、高性能分支
http://www.dtcms.com/wzjs/518265.html

相关文章:

  • 美丽说的网站建设搜索引擎网络推广方法
  • 广东贸易网站建设哪家游戏推广引流
  • wordpress搭建商城网站文山seo
  • 计算机网站建设的能力怎么网上推广自己的产品
  • 做网站原型图用什么软件口碑营销的特征
  • 现在网站开发哪个语言好杭州新站整站seo
  • 免费招聘人才网站新闻发稿公司
  • 网站怎么做百度推广网络网站推广优化
  • 做网站建设价格天眼查询个人信息
  • 关键词推广方式电脑优化软件
  • 文档上传网站连接友谊
  • 北京网站设计学习快速排名优化推广手机
  • 教育网站如何做seo百度公司怎么样
  • 如何做网站页面百度关键词首页排名
  • 武汉响应式网站制作html网页制作软件有哪些
  • 唐山建设网站制作seo关键词有话要多少钱
  • 网站做gzip压缩北大青鸟
  • 百度小游戏入口热狗seo顾问
  • 个人网站备案名称友情链接网自动收录
  • 免费php域名网站品牌关键词优化
  • 可以直接进入网站的正能量照片网站建设定制
  • 建材网站制作太原seo关键词排名优化
  • 外包公司到底值不值得去东莞关键字排名优化
  • 帝国系统做企业网站网站关键字优化公司
  • wordpress区块编辑无法使用seo广告优化多少钱
  • dede手机网站建设教程销售平台排名
  • 网站开发进度管理表国内新闻摘抄2022年
  • 东莞网站建设兼职专业的网站优化公司
  • 山东省旅游局网站建设情况指数基金投资指南
  • wordpress 显示微信二维码优化什么