C++17/C++2a 中编译时的哈希类型

2023-11-26

考虑以下代码:

#include <iostream>
#include <type_traits>

template <class T>
constexpr std::size_t type_hash(T) noexcept 
{
    // Compute a hash for the type
    // DO SOMETHING SMART HERE
}

int main(int argc, char* argv[])
{
    auto x = []{};
    auto y = []{};
    auto z = x;
    std::cout << std::is_same_v<decltype(x), decltype(y)> << std::endl; // 0
    std::cout << std::is_same_v<decltype(x), decltype(z)> << std::endl; // 1
    constexpr std::size_t xhash = type_hash(x);
    constexpr std::size_t yhash = type_hash(y);
    constexpr std::size_t zhash = type_hash(z);
    std::cout << (xhash == yhash) << std::endl; // should be 0
    std::cout << (yhash == zhash) << std::endl; // should be 1
    return 0;
}

我想要type_hash函数在编译时返回该类型唯一的哈希键。有没有办法在 C++17 或 C++2a 中做到这一点(理想情况下仅依赖标准而不依赖编译器内在函数)?


我怀疑纯粹使用标准 C++ 是否可能实现这一点。


但有一个解决方案适用于大多数主要编译器(至少 GCC、Clang 和 MSVC)。您可以对以下函数返回的字符串进行哈希处理:

template <typename T> constexpr const char *foo()
{
    #ifdef _MSC_VER
    return __FUNCSIG__;
    #else
    return __PRETTY_FUNCTION__;
    #endif
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++17/C++2a 中编译时的哈希类型 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • C 编程:带有数组的函数

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

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C++ 中的参考文献

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

随机推荐

  • 在 javascript 中加密并使用 AES 算法在 C# 中解密

    我尝试使用 AES 库进行角度加密AES 我使用以下方法加密了字符串CryptoJS AES encrypt AES 方法 这是我的代码 var txtloginKod Some String var key CryptoJS enc Ut
  • GCC 无法使用 init-capture 捕获指向模板类型的“this”指针

    模板类可以捕获自己的thislambda 中的指针 template
  • 如何获取 Git 中 master 分支的默认值?

    由于简短 GitHub 建议使用main代替master对于默认分支 我们怎样才能得到这个名字 因为编写有弹性的 Git 别名 如何获取 Git 中 master 分支的默认值 我已经搜索过 但没有任何解决方案git 如何获取默认分支 对我
  • 如何实现 getline() 的超时? [复制]

    这个问题在这里已经有答案了 我想从命令行读取一个字符串getline 在c 中 为此我想添加一个计时器5秒 如果没有读取到字符串 则程序将终止 我怎样才能做到这一点 好的 等等5秒 和terminate如果没有输入 include
  • 为什么浏览器不会因语法错误抛出异常?

    我不小心写了一个错误的 JavaScript 语法 我是这么认为的 code is var temp temp a 34 height 34 should fail here temp b 56 jsfiddle 语法是否正确 Thanks
  • 如何修复 PHP 中的“标头已发送”错误

    这个问题的答案是社区努力 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 运行我的脚本时 我收到几个如下错误 警告 无法修改标头信息 标头已由 输出从 some file php 12 开始 in 一些 文件 php on line
  • 有没有一种方法可以让我在标签内使用 Spans 并使其合理?

    我正在使用此代码向标签内的文本添加一些颜色
  • 计算 Pi Java 程序

    我正在参加我的第一堂 Java 编程课程 这是我的第一个课程项目 我对如何处理它感到很困惑 任何帮助或纠正将不胜感激 您可以使用以下级数来近似常数 PI 的值 PI 4 1 1 3 1 5 1 7 1 9 1 11 1 i 1 2i 1 提
  • 使用 IntelliJ IDEA 调试 Spring WebFlux / Reactor 应用程序

    我正在使用 IntelliJ IDEA 创建 Spring WebFlux Reactor 应用程序 IDEA的调试器显示了许多无用的行 例如MonoDefer MonoFlatMap等 有没有办法轻松跟踪堆栈 不幸的是 在异步世界中 堆栈
  • Android——如何从应用程序内向市场发布应用程序评级/评论?

    这是一个简单的问题 有没有办法允许用户直接在我的应用程序中输入对我的应用程序的评论和 或评级 并将该数据发布回 Android Market 如果是这样 如果我使用 EditText 视图来允许用户输入 那么代码会是什么样子 如果不是 那么
  • 通过 Javascript 更改图像颜色

    我一直在寻找在使用单击事件时更改图像的颜色 我偶然发现了这篇文章 其中对马克杯的第一个也是主要的回应效果非常好 但是 我需要使用类 而不是 ID 因为我需要更改多个图像的颜色 当我将代码更改为 getElementsByClassName
  • Python urllib2 强制 IPv4

    我正在使用 python 运行一个脚本 该脚本使用 urllib2 从天气 api 获取数据并将其显示在屏幕上 我遇到的问题是 当我查询服务器时 出现 没有与主机名关联的地址 错误 我可以使用 Web 浏览器查看 api 的输出 并且可以使
  • Pandas 嵌套排序和 NaN

    我试图理解预期的行为数据框 sort在具有 NaN 值的列上 给定这个数据框 In 36 df Out 36 a b 0 1 9 1 2 NaN 2 NaN 5 3 1 2 4 6 5 5 8 4 6 4 5 正如预期的那样 使用一列排序将
  • 用于长时间运行测试的 testthat 模式

    我有一堆测试 我不希望它们在 CRAN 检查或 Travis CI 构建期间运行 它们要么是长时间运行的 要么可能导致写入网络数据库的事务 并发冲突 哪种分离它们的方法 与 R CMD 检查测试 最适合testthat 我应该将这些测试放在
  • 实体框架CTP5 - 如何调用存储过程?

    这可能是一个简单的答案 但我看不到如何使用 EF CTP5 执行存储过程 在实体框架 4 0 中 我们这样做了 ExecuteFunction ContainerName StoredProcName new ObjectParameter
  • 当列名包含空格和特殊字符时从 data.table 包中读取?

    我有一个 csv 文件 其中列名称包含空格和特殊字符 fread用引号导入它们 但我怎样才能改变这种行为 原因之一是我的列名以空格开头 但我不知道如何处理它们 任何指示都会有帮助 编辑 一个例子 gt packageVersion data
  • iOS下拉视图[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我一直在寻找下拉视图 展开和折叠视图 当用户单击它或折叠时基本上会展开 下拉列表基本上用于包含文本视图 文本字段 到目前为止 我无法找到如何创建这个
  • python中csv.writer的制表符'\t'的分隔符

    我想将字典写入 csv 中 如下形式 column1 column2 aaa 1 bbb 2 但是当我在以下代码中使用 t 作为分隔符时 import csv csv filename test csv dict aaa 1 bbb 2 w
  • Playframework:[RuntimeException:java.lang.reflect.InitationTargetException]

    我正在尝试基于 Zentask 示例创建一个简单的登录 zentask playframework 但是当我单击调用 Application authenticate 操作的登录按钮时 它会给出运行时异常 我已用 error 标记了该行 R
  • C++17/C++2a 中编译时的哈希类型

    考虑以下代码 include