检查类模板是否已实例化?

2024-04-17

有没有一种简单的方法可以查看一个类是否已在翻译单元中实例化? C++ Primer 中的一个练习询问每个带标签的语句,是否发生实例化:

template <typename T> class Stack { };
void f1(Stack<char>); // (a)
class Exercise {
    Stack<double> &rsd; // (b)
    Stack<int> si; // (c)
};
int main() {
    Stack<char> *sc; // (d)
    f1(*sc); // (e)
    int iObj = sizeof(Stack< string >); // (f)
}

我不确定如何真正检查我的答案。我想也许我可以为每个类类型使用显式实例化(例如extern template class Stack<char>),然后在程序中永远不会有相应的显式实例化定义。这样,如果实例化了某些东西,如果定义后来没有出现,那么链接器就会引发错误。

然而编译器/链接器并不总是能识别这样的错误:

template <typename T> class A{ };
extern template class A<int>;
int main(){
    A<int> a; 
}

这在 gcc 4.9.2 上编译得很好。然而,如果这是我的程序中唯一的目标文件,据我从 N3337 的 [14.7.2][11] 可以看出,这应该是一个错误:

如果一个实体是同一翻译单元中显式实例化声明和显式实例化定义的主题,则定义应遵循声明。作为主题的实体 显式实例化声明,并且其使用方式也会导致翻译单元中的隐式实例化(14.7.1),应成为程序中某处显式实例化定义的主题;否则程序格式错误,无需诊断。

(我猜“不需要诊断”就是为什么这不会引发错误?)。或者,每当不完整的类类型对于表达式不可行时,实例化就会发生 - 这样我就可以通过删除以下定义来进行检查Stack?

template <typename T> class Stack;

那么每个不完整的类型错误都对应于实例化发生的地方吗?


您可以在可执行文件上使用 nm 工具。这将显示哪个文件包含函数定义。 gcc 还提供了一个标志来在进行链接时去除未使用的函数。

使用“-fdata-sections”进行编译,将数据保存在单独的数据部分中,使用“-ffunction-sections”进行编译,将函数保存在单独的部分中,因此如果不使用它们(数据和函数),可以将其丢弃。 与“--gc-sections”链接以删除未使用的部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查类模板是否已实例化? 的相关文章

  • 在 C/C++ 中获得正模数的最快方法

    通常在我的内部循环中 我需要以 环绕 方式索引数组 因此 例如 如果数组大小为 100 并且我的代码要求元素 2 则应该给它元素 98 高级语言 例如 Python 可以简单地使用my array index array size 但由于某
  • QCombobox 向下箭头图像

    如何更改Qcombobox向下箭头图像 现在我正在使用这个 QSS 代码 但这不起作用 我无法删除向下箭头边框 QComboBox border 0px QComboBox down arrow border 0px background
  • 在实体框架拦截器中向 DbScanExpression 添加内部联接

    我正在尝试使用实体框架 CommandTree 拦截器通过 DbContext 向每个查询添加过滤器 为了简单起见 我有两个表 一个称为 User 有两列 UserId 和 EmailAddress 另一个称为 TenantUser 有两列
  • 我如何理解这个 C 类型声明?

    double bar int double double double double 在查看讲座幻灯片时 我发现了留给学生的练习 用简单的英语来说 什么是类型bar在这个 C 声明中 Please帮助我解决这个问题 我什至不知道从哪里开始
  • 我如何在 C# .NET(win7 手机)中使用“DataContractJsonSerializer”读入“嵌套”Json 文件?

    我有一个问题 如果我的 json 文件看起来像这样 Numbers 45387 Words 空间桶 我可以很好地阅读它 但是如果它看起来像这样 Main Numbers 45387 Words 空间桶 某事 数字 12345 单词 克兰斯基
  • 根据 N 个值中最小的一个返回不同的结果

    不确定如何使标题更具描述性 所以我只是从一个例子开始 我使用下面的代码位 它从枚举中选择一个方向 具体取决于四个轴中哪一个与给定方向相比形成最小角度 static Direction VectorToDirection Vector2 di
  • 为什么这个没有特殊字符的正则表达式会匹配更长的字符串?

    我正在使用此方法来尝试查找匹配项 例如 Regex Match A2 TS OIL TS OIL RegexOptions IgnoreCase Success 我得到了真实的结果 我很困惑 我认为这应该返回 false 因为模式中没有特殊
  • 时间:2019-03-17 标签:c#ThreadSafeDeepCopy

    我一直在阅读很多其他问题以及大量谷歌搜索 但我一直无法找到明确的解决方案 根据我读过的一些最佳实践 类的静态方法应该创建线程安全的 并且实例成员应该将线程安全留给消费者 我想为该类实现深度复制方法 该类本身还有其他引用类型成员 有没有什么方
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • 从 WebBrowser 控件 C# 获取滚动值

    我试图在 WebBrowser 控件中获取网页的 Y 滚动索引 但无法访问内置滚动条的值 有任何想法吗 对于标准模式下的 IE 使用文档类型 正如你所说 scrollTop是的财产元素 而不是 HtmlDocument htmlDoc th
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 如何分析组合的 python 和 c 代码

    我有一个由多个 python 脚本组成的应用程序 其中一些脚本正在调用 C 代码 该应用程序现在的运行速度比以前慢得多 因此我想对其进行分析以查看问题所在 是否有工具 软件包或只是一种分析此类应用程序的方法 有一个工具可以将 python
  • 使用restsharp序列化对象并将其传递给WebApi而不是序列化列表

    我有一个看起来像的视图模型 public class StoreItemViewModel public Guid ItemId get set public List
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • C++ Streambuf 方法可以抛出异常吗?

    我正在尝试找到一种方法来获取读取或写入流的字符数 即使存在错误并且读 写结束时间较短 该方法也是可靠的 我正在做这样的事情 return stream rdbuf gt sputn buffer buffer size 但如果streamb
  • 矩阵到数组 C#

    这将是转换方阵的最有效方法 例如 1 2 3 4 5 6 7 8 9 into 1 2 3 4 5 6 7 8 9 in c 我在做 int array2D new int 1 2 3 4 5 6 7 8 9 int array1D new

随机推荐

  • h:button 和 h:commandButton 之间的区别

    在 JSF 2 中 有什么区别h button and h commandButton
  • 在 Javascript 变量中存储密码有哪些安全隐患?

    我正在开发一个需要良好安全性的网络应用程序 在目前的设计中 许多用户操作需要用户重新发送密码 否则服务器将不得不以纯文本形式存储密码 至少暂时如此 许多用户交互是通过 AJAX 请求进行的 我不想让用户重新输入每个密码 而是想做这样的事情
  • 有谁知道即使页面已刷新,如何保留 Javascript 变量?

    Example 在主页中单击一个按钮 新 然后页面将使用 Javascript 在新窗口中打开新页面 调用重定向 Page 在主页中单击一个按钮 退出 然后页面然后会调用 确认退出 然后 closeChildWindows 关闭所有 在重定
  • 什么算作失败?

    假设我有一个伪 C 程序 For i 0 to 10 x a 2 x 5 next 30 FLOPS 的 FLOP 数量是 1 x 1 x 5 1 2 x 5 10 loop 吗 我很难理解什么是失败 请注意 指示我从何处获取 操作 计数
  • 在 PHP 中生成独特的组合

    我需要从给定的数据集 n 个数字 生成唯一的组合 每个组合都包含 r 值 基本上希望实施C n r n r n r PHP 中的公式 输入数据集 A B C D 并需要 3 个值的唯一组合 如下所示 C n r C 4 3 4 3 4 3
  • 如何在Java中使绘制的图像透明

    我让动画在我的 蛇克隆游戏 中发挥作用 但基于图片的问题是图像没有透明度 注意圆形图片的白色背景 编程方面 是否有解决方案能够使这些绘制的图像包含透明度 这是一张包含我的代码和程序输出的图片 附 顺便说一句 我决定粘贴直接链接而不是 IMG
  • Grails 命令对象:如何将 request.JSON 加载到其中?

    Question 有没有办法使用 request JSON 数据进行自动命令对象绑定 在我的 grails 控制器中给出这个简单的 Command 对象 class ProfileCommand int id String companyN
  • 从匿名类调用新定义的方法

    我实例化了一个匿名类的对象 并向其中添加了一个新方法 Date date new Date public void someMethod 我想知道是否可以从外部调用此方法 类似于 date someMethod 好问题 答案是否定的 您不能
  • 2015年如何从lfd安装mod_wsgi

    我如何从 lfd 网站安装 mod wsgi 因为它有轮扩展 每当我搜索如何在 wamp 上安装 mod wsgi 时 资源都会告诉我从该网站安装二进制文件 然后将 mod wsgi so 文件保留在我的 wamp 目录中 lfd 页面上有
  • 如何为nodejs生成调用图?

    跟进如何为给定的 JavaScript 生成调用图 https stackoverflow com questions 10182387 它被关闭了 因为它需要关注 只有一个问题 所以这是我的重点 如何为我的 Node js Javascr
  • Flex:获取自己的 SWF 文件名?

    有没有办法以编程方式确定我的类正在运行的 swf 文件名 Thanks Stage http livedocs adobe com flex 3 langref flash display Stage html has a 加载器信息 ht
  • 如何使用 --timid 标志来覆盖鼻子

    我想使用运行 nosetests with coverage 内德 巴切尔德 Ned Batchelder 的报道模块 http nedbatchelder com code coverage 但将 timid 标志传递给覆盖模块 有没有办
  • 如何轻松编写克隆方法?

    我有一个带有虚拟克隆新方法的基类 class A virtual A cloneNew const return new A 及其衍生物 class A1 public A virtual A1 cloneNew const return
  • 观察 NSUserDefaults 键的值更改

    我对保存在 NSUserdefaults 中的特定键的值变化感兴趣 然而 我所拥有的并不适合我 observeValueForKeyPath 不会被触发 更新 我想我已经发现了这个问题 如果我使用字符串 而不是使用定义的常量 那么它就会被触
  • 如何在 iOS 13 中以编程方式隐藏和显示状态栏?

    我制定了以下隐藏和再次显示状态栏的常用方法 它在 iOS 13 之前工作正常 但当我在 iOS 13 或更高版本的设备上运行它时 我遇到了崩溃 void showStatusBar BOOL show UIView statusBar UI
  • 如何在运输方式(后端)中添加自定义描述字段

    我想在运输方式下的运输区域页面中添加一个自定义字段 它将是一个文本输入 用户将能够添加自定义消息 我将在前端显示该消息 我注意到它将数据保存在wp woocommerce shipping zone methods没有任何额外列来保存数据的
  • Log4Net 或 NLog(或其他记录器)是否有办法以执行堆栈嵌套 XML 或 JSON 格式输出日志?

    Log4Net 或 NLog 或其他记录器 中是否有一种方法可以以执行堆栈嵌套 XML 或 JSON 格式输出日志 这样 if 函数A calls B 7 那个叫C something 它会输出类似以下内容
  • Django Rest Framework 中的视图集“创建”自定义分配值

    想设置一个自定义用户的用户名通过使用输入电子邮件 但在哪里进行自定义分配 在视图中 同时它也接收一个文件 模型 py class CustomUser AbstractUser avatar models ImageField max le
  • 用一条线绘制每年的时间序列数据

    我有一个包含 20 多年股票数据的数据框 Open High Low Close Adj Close Volume Date 2001 01 02 1 062500 1 089286 1 040179 1 062500 0 930781 1
  • 检查类模板是否已实例化?

    有没有一种简单的方法可以查看一个类是否已在翻译单元中实例化 C Primer 中的一个练习询问每个带标签的语句 是否发生实例化 template