编译时常量 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 的相关文章

随机推荐

  • 如何在 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