编译时常量 id

2024-04-12

鉴于以下情况:

template<typename T>
class A
{
public:
    static const unsigned int ID = ?;
};

我希望 ID 为每个 T 生成一个唯一的编译时 ID。我考虑过__COUNTER__和 boost PP 库,但到目前为止还没有成功。我怎样才能实现这个目标?

编辑:ID 必须可用作 switch 语句中的情况

Edit2:所有基于静态方法或成员的地址的答案都是不正确的。尽管它们确实创建了唯一的 ID,但它们在编译时并未解析,因此不能用作 switch 语句的情况。


假设有一个符合标准的编译器(相对于一个定义规则),这就足够了:

template<typename T>
class A
{
public:
    static char ID_storage;
    static const void * const ID;
};

template<typename T> char A<T>::ID_storage;
template<typename T> const void * const A<T>::ID= &A<T>::ID_storage;

来自 C++ 标准 3.2.5 一条定义规则 [basic.def.odr](粗体强调是我的):

...如果 D 是一个模板并且在多个翻译中定义 单位,则应适用上面列表中的最后四项要求 模板中使用的模板封闭范围中的名称 定义(14.6.3),以及从属名称 实例化(14.6.2)。如果 D 的定义满足所有这些 要求,那么程序的行为就好像有一个单一的 D 的定义如果 D 的定义不满足这些 要求,那么行为是未定义的。

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

编译时常量 id 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri

随机推荐

  • 如何在 Haskell 中使用 TypeApplications?

    With XTypeApplications在 GHC 8 0 中 您可以使用显式指定类型 前面的函数参数 它到底指定了什么类型 尤其是当有多个类型时 有介绍吗 如果你看一下函数的类型 elem Foldable t Eq a gt a g
  • 适用于 Android/Java 的“自从/以前的时间”库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 对于 Android Java 显示时间的好库有什么建议吗 例如 10 分钟前 5 天前 来自 Goog
  • 多个目标名称具有相同的动画

    只是一个疑问 我的 WPF 应用程序中有三个图像 我将为这三个图像提供闪烁效果 所以我给出了这段代码
  • 多个等待与 Task.WaitAll - 等效吗?

    从性能上来说 这2个方法会跑吗GetAllWidgets and GetAllFoos 在平行下 有什么理由使用其中一种而不是另一种吗 编译器在幕后似乎发生了很多事情 所以我不清楚 方法A 使用多个等待 public async Task
  • 重定向 PHP [重复]

    这个问题在这里已经有答案了 如何从 PHP 页面重定向到另一个页面 div div a href login html class ui btn left Back a div div
  • 根据旋转角度计算XY运动?

    假设我在 2D 空间中有一个可以旋转的对象 然后应该根据其旋转角度移动 例如 如果角度为0 指向上方 则on timer它应该将 1 移动 Y 将 0 移动 X 如果角度为 45 那么它应该按 Y 移动 1 按 X 移动 1 如果指向 90
  • 使用 Postgresql 让 Sqlalchemy 在过滤器中使用日期

    我正在尝试在 Sqlalchemy 中执行以下查询 Select from Mytable where Date date time field 2011 08 16 我尝试了几种方法 有些在这里 但没有一个看起来 现实 因为有些确实强制转
  • Python urllib2:即使在 HTTPError 异常期间也读取内容主体?

    我正在使用 urllib2 通过 HTTP 获取页面 有时 当我的请求包含错误时 资源会抛出 HTTP 错误 400 错误请求 但是 该响应还包含一个提供详细错误消息的 XML 元素 能够看到该错误而不仅仅是 urllib2 返回的 HTT
  • getResourceAsStream(file) 在哪里搜索文件?

    我很困惑getResourceAsStream 我的包结构如下 src net floodlightcontroller invoked getResourceAsStream here resources floodlightdefaul
  • 查找mysql死锁原因

    1 我有一个脚本 执行一些更新 删除操作 2 所有sql操作都在事务内执行 InnoDb表 3 有时我会收到 尝试获取锁定时发现死锁 尝试重新启动事务 该应用程序中还有一些其他作业执行数据库操作 我的问题是找出其他脚本中的哪些并发查询会干扰
  • 如何使用 Apache SOLR 和 PHP 代码突出显示搜索结果

    我使用 SOLR 和 Tomcat servlet 容器开发了搜索页面 使用 PHP 代码 我将搜索查询发布到 solrQuery 函数中 并在此函数中定义了查询参数 如下所示 query q trim urlencode q versio
  • CUDA:如何在设备上填充动态大小的向量并将其内容返回到另一个设备函数?

    我想知道哪种技术可以填充设备上的动态大小数组 int row 在下面的代码中 然后返回其内容 以供另一个设备函数使用 为了将问题置于上下文中 下面的代码尝试使用在 GPU 上运行的高斯 勒让德求积来跨越勒让德多项式基组中的任意函数 incl
  • 如何从 vbs 脚本发送电子邮件

    如何从 vbs 脚本发送电子邮件 在无法连接到互联网的计算机上 位于我的非互联网区域 我通过谷歌搜索将以下内容整合在一起 但似乎需要调用微软的服务器 如果我无法访问 microsoft com 该怎么办 sch http schemas m
  • 如何在发送PHP邮件时隐藏服务器信息?

    我有这样的事情 to subject msg from From me lt email protected cdn cgi l email protection gt mail to subject msg from 当我发送电子邮件时
  • 函数模板显式特化声明中尾随模板参数的推导(无函数参数推导)

    这个问题是评论中讨论的分支变量模板的模板特化和类型推导 https stackoverflow com questions 61384251 template specialization of variable template and
  • 找到实际的 RTMP 流 URL?

    让我举个例子 这是视频嵌入代码 div Loading the player div
  • Swift 4:Firebase 时间戳

    我应该如何将 Firebase 时间戳与本地设备时间进行比较 let serverTIme FIRServerValue timestamp let localtime Date let dbRef FirebaseServerRefere
  • TypeScript 中的 WebView 扩展

    在代码示例 catcoding 中 支持 webview 逻辑被编写为 JavaScript 中的匿名函数 但我想在 Typescript 中构建此支持逻辑 我厌倦了用 requireJS 将这个逻辑重现为打字稿包 但我无法让它工作 Thi
  • 在 C# 中使用 CreateRemoteThread 传递多个参数

    我的目标是使用 C 中的 P Invoke CreateRemoteThread 调用远程进程中的函数 问题是该函数需要多个参数 有没有办法将多个参数传递给函数 DllImport kernel32 dll SetLastError tru
  • 编译时常量 id

    鉴于以下情况 template