如何使用 C++ 模板减少编译时间

2024-02-21

我正在将我的 C++ 应用程序的一部分从使用旧的 C 类型数组更改为模板化的 C++ 容器类。看这个问题 https://stackoverflow.com/questions/2472944/good-c-array-class-for-dealing-with-large-arrays-of-data-in-a-fast-and-memory-e了解详情。虽然该解决方案运行良好,但我对模板化代码所做的每一个微小更改都会导致发生大量重新编译,从而大大减慢构建时间。有没有什么方法可以将模板代码从标头中取出并返回到 cpp 文件中,以便较小的实现更改不会导致重大重建?


几种做法:

  • The 导出关键字 http://www.parashift.com/c++-faq-lite/separate-template-fn-defn-from-decl-export-keyword.html理论上可以提供帮助,但它的支持很差,并在 C++11 中被正式删除。
  • 显式模板实例化(参见here https://isocpp.org/wiki/faq/templates#separate-template-fn-defn-from-decl or here https://msdn.microsoft.com/en-us/library/by56e477%28v=vs.140%29.aspx)是最直接的方法,如果您可以提前预测您将需要哪些实例化(并且如果您不介意维护此列表)。
  • 外部模板,已经被多个编译器支持作为扩展。据我了解,外部模板不一定让您将模板定义移出头文件,但它们确实使编译和链接速度更快(通过减少模板代码必须实例化和链接的次数)。
  • 根据您的模板设计,您也许能够将其大部分复杂性转移到 .cpp 文件中。标准示例是一个类型安全的向量模板类,它仅包装一个类型不安全的向量void*;所有的复杂性都集中在void*驻留在 .cpp 文件中的向量。 Scott Meyers 在 Effective C++ 中给出了更详细的示例(第 42 项,“明智地使用私有继承”,第 2 版)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 C++ 模板减少编译时间 的相关文章

  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • MySQL:为什么我的 INSERT 语句在自动递增 id 时会跳过 56 个数字?

    在向我的 SQL 课程的学生演示 INSERT 语句时 我们发现了 MySQL 8 0 中的一些奇怪行为 请帮助我们了解发生了什么 不需要解决方法 因为我们知道一些解决方法 这是为了学习 而不是为了生产 谢谢 我们正在创建一个新数据库并从众
  • MVC4 脚手架添加控制器给出错误“无法检索元数据...”

    我使用的是 RTM 版本的 Windows 8 和 VS 2012 Ultimate 我有一个 MVC4 项目使用具有代码优先实体框架模型的 SqlCe 4 0 模型非常简单 public class MyThing public int
  • Ubuntu 上的 java 和 libGDX / LWJGL 游戏全屏多显示器尺寸错误

    我正在开发一个 libGDX LWJGL 之上的库 游戏项目 并从多个不同的工作站使用 Intellij IDEA IDE Windows 7 x64 笔记本电脑 配备两个显示屏 1920x1080 和 1600x1200 nVidia G
  • WCF 多重绑定

    当我尝试多个端点时出现以下错误 System ServiceModel AddressAlreadyInUseException The TransportManager failed to listen on the supplied U
  • XAudio2 - 更改频率时播放生成的正弦声音

    我想开发一个应用程序来匹配您的耳鸣频率 播放频率 用户通过按加号或减号按钮来减少或增加频率 参见部分代码 基于 stackoverflow 的一些编码 谢谢 public static short BufferSamples new sho
  • Scala Play Json 读取

    我有一个示例代码如下 import play api libs json import play api libs functional syntax import play api data validation ValidationEr
  • 我应该使用什么 shebang 来始终指向 python3?

    我有一个使用 shebang 的脚本 usr bin env python 它在 Python 3 是唯一可用版本的计算机上运行良好 但在同时具有 Python 2 和 Python 3 的计算机上 它使用 Python 2 运行脚本 如果
  • 如何检测 TabBarView 刚刚被拖动?

    TabBar 小部件有一个 onTap 回调 可以检测用户何时刚刚按下了选项卡 这很有用 因此我们可以准备新的 tabView 来显示一些动态数据 TabBar 小部件还具有拖动功能 允许更改显示的 tabView 与点击另一个选项卡的结果
  • 当我将鼠标悬停在其上方大小发生变化的元素上时,如何防止 div 移动

    http bit ly 1fVGrBT http bit ly 1fVGrBT 这是我的网站 当您将鼠标悬停在 Problem 上并移开时 其下方的 div 会被上下推动 解决方案也会发生同样的情况 有什么想法或建议如何防止它移动吗 我认为
  • 采购后清理全局环境:如何在 R 中删除某种类型的对象

    我读到了一个公共数据集 该数据集在构建最终数据帧的过程中创建了数十个临时向量 由于该数据框将作为更大流程的一部分进行分析 因此我计划source使用创建数据帧的 R 脚本 但不想让自己或未来的用户面临混乱的全局环境 我知道我可以使用ls列出
  • 具有多个字段的对象的Java比较器[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个对象Collection有 5 个字段 id entityType entityId brandId productId 要对一个
  • 如何拦截 .NET 程序中对文件的访问

    我需要在系统尝试访问文件时进行拦截 并在其发生之前执行某些操作 您可以使用FileSystemWatcher http msdn microsoft com en us library system io filesystemwatcher
  • 使用 python-requests 上传文件 - UnicodeDecodeError

    我正在尝试使用 python requests 上传文件 with open file zip rb as fff up requests post url files file fff 并得到 UnicodeDecodeError asc
  • TADOStoredProc 和 SQL Server 存储过程,参数作为默认值

    我正在使用 Delphi 7 和 SQL Server 2008 我创建了一个虚拟表和虚拟存储过程 如下所示 CREATE TABLE dbo Persons P ID int IDENTITY 1 1 NOT NULL LastName
  • 为什么枚举会转换为函数?

    考虑 enum Colors Red Green Blue 它转换成这样 var Colors function Colors Colors Colors Red 0 Red Colors Colors Green 1 Green Colo
  • @classmethod 的位置

    装饰器类方法的源代码位于python源代码中的哪里 具体来说 我无法找到它在版本 2 7 2 中定义的确切文件 我没有回答你的问题 但下面的代码显示了装饰器可能相当于classmethod 用纯 Python 编写 因为源代码中的那个是用
  • Xcode — 在外部编辑器中快速打开当前文件

    是否可以设置键盘快捷键 或者在某处添加一些菜单项 以在外部编辑器中打开当前编辑的文件 显然我可以这样做 在文件树中右键单击 在Finder中显示 在窗口标题中右键单击 选择包含目录 右键单击文件 打开方式 应用程序 但步骤太多了 呵呵 我已
  • Hibernate 搜索查找短语的部分匹配

    在我的项目中 我们使用带有 lucene 分析器和 Solar 的 Hibernate Search 4 5 我向我的客户提供一个文本字段 当他们输入一个短语时 我想找到所有User名称包含给定短语的实体 例如 考虑数据库中具有以下标题的条
  • 什么时候问题对于正则表达式来说太复杂了?

    请不要回答显而易见的问题 但是有哪些限制标志告诉我们不应使用正则表达式来解决问题 例如 为什么完整的电子邮件验证对于正则表达式来说太复杂 正则表达式是以下内容的文本表示有限状态自动机 http en wikipedia org wiki F
  • 如何使用 C++ 模板减少编译时间

    我正在将我的 C 应用程序的一部分从使用旧的 C 类型数组更改为模板化的 C 容器类 看这个问题 https stackoverflow com questions 2472944 good c array class for dealin