c++ - 减少普通类型 std::vector 模板实例化数量的选项
问题描述
假设我有以下示例代码只是为了实例化std::vector
至少两种普通类型的 insert 方法:
#include <vector>
void insert(std::vector<int>& v, int const* a, int const* b)
{ v.insert(v.end(), a, b); }
void insert(std::vector<short>& v, short const* a, short const* b)
{ v.insert(v.end(), a, b); }
如果您编译此代码,您将获得相同代码的几乎完全相同的副本(请参阅此处的编译方式)。
是否可以在不滚动您自己的假设 T 微不足道的专用 std::vector 的情况下实现更紧凑的代码?所以在真正的实现中可以把类型扔掉,所以繁重的工作可以直接用memcpy
and来实现realloc
。我猜这个根据标准的解决方案是UB。
例如,编译器没有合并uninitialized_copy
. 我意识到不允许将两个不同的符号映射到同一个地址,但至少不能用跳转到第一个副本替换第二个副本。这甚至不会发生在-Os
.
解决方案
推荐阅读
- python - Matplotlib 使用子图后创建多个图形
- ocaml - Ocaml `new` 关键字
- azure - 将 Powershell 对象 CSV 字符串作为文件保存到 Azure Blob 存储
- liquibase - 使用 Liquibase 自动生成的 xml 进行 Corda Enterprise DB 迁移
- ruby-on-rails - 如果发现未找到结果,则用 p 标签替换表格标签
- sql-server - 将 MS Access 数据传输到 SQL Server 2014 Express 时出错
- elasticsearch - 在 Logstash 文件中导入许多表
- r - r中的多个部分字符串选择
- java - Visual Studio Code:终端输入口音(java.util.Scanner)
- android - Android Studio:底部导航视图 - AAPT:错误:“”与可绘制属性 (attr) 引用不兼容