编译时映射和逆映射值

2024-05-06

有人可以推荐一种更优雅的方法来实现这些编译时常量吗?

template <int> struct Map;
template <> struct Map<0> {static const int value = 4;};
template <> struct Map<1> {static const int value = 8;};
template <> struct Map<2> {static const int value = 15;};

template <int> struct MapInverse;
template <> struct MapInverse<4> {static const int value = 0;};
template <> struct MapInverse<8> {static const int value = 1;};
template <> struct MapInverse<15> {static const int value = 2;};

在我的程序中,这些值需要是 constexpr,但是逆映射值的更新变得很乏味(并且很容易犯错误,甚至忘记做)。


在此 C++11 解决方案中,所有映射项都保存在constexpr数组并且有constexpr按键或值搜索的递归函数。

#include <utility>

using Item = std::pair<int, int>;
constexpr Item map_items[] = {
    { 6, 7 },
    { 10, 12 },
    { 300, 5000 },
};
constexpr auto map_size = sizeof map_items/sizeof map_items[0];

static constexpr int findValue(int key, int range = map_size) {
    return
            (range == 0) ? throw "Key not present":
            (map_items[range - 1].first == key) ? map_items[range - 1].second:
            findValue(key, range - 1);
};

static constexpr int findKey(int value, int range = map_size) {
    return
            (range == 0) ? throw "Value not present":
            (map_items[range - 1].second == value) ? map_items[range - 1].first:
            findKey(value, range - 1);
};

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

编译时映射和逆映射值 的相关文章

  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 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
  • gcc,我可以将 offsetof() 与指向成员的模板化指针一起使用吗?

    下面的代码在这里 https ideone com XnxAyw https ideone com XnxAyw 我得到的编译器错误是 prog cpp In member function size t list base
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

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

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

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • MySQL Connector C/C API - 使用特殊字符进行查询

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

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 在 AtTask PUT 请求中发送多个更新

    我想知道 AtTask 的 API 中是否有一种方法可以在单个 URL 请求中发布多个更新 例如 我需要更新 1 000 条记录的 extRefID 我是否可以对 API 进行 1 000 次调用 就开销而言成本高昂 或者我可以使用包含如下
  • C++ 构造函数抛出异常时销毁对象的成员变量

    这个问题是基于 Scott Meyers 在他的书 更有效的 C 中提供的一个例子 考虑下面的类 A class to represent the profile of a user in a dating site for animal
  • 我可以在 pandas 中执行动态行累加吗?

    如果我有以下数据框 如下导出 df pd DataFrame np random randint 0 10 size 10 1 0 0 0 1 2 2 8 3 1 4 0 5 0 6 7 7 0 8 2 9 2 有没有有效的方法cumsum
  • 使用 ImageMagick 进行 SVG 转换无法正确应用翻译

    我使用的是 Mac OS X 10 5 的 Mac 我正在尝试使用 ImageMagick 来转换SVG http en wikipedia org wiki Scalable Vector Graphics文件到一个PNG http en
  • 在二维平面中找到距离 P 点最近的 K 个点

    资料来源 亚马逊面试问题 解决方案1制作大小为 K 的堆并按最小距离收集点O NLogK 复杂 解决方案2 取大小为 N 的数组并按距离排序 应该使用QuickSort 霍尔修改 取前 K 点作为答案 这太复杂了 NlogN 但可以优化到近
  • 实现特征时“预期类型参数,找到结构”

    我正在尝试为有向图结构创建一个特征并提供一个非常基本的实现 但遇到编译器错误 pub trait DiGraph lt a gt type N fn nodes
  • 使用 vs code,如何让 scala 格式工作并格式化我的代码?

    我的多项目 sbt 存储库中有 scala 格式插件 addSbtPlugin org scalameta sbt scalafmt 2 3 2 所以在 sbt 控制台中如果我运行 scalafmt 它工作正常 我的 build sbt 有
  • 如何使用java与防火墙(路由器)建立ssh连接?

    由于某种原因 我需要连接到防火墙 基于Linux 并使用Java添加一些规则 用google搜索了一段时间后 我发现jsch是我最好的选择 但是当我 用它来执行命令 显示主机名 例如 返回错误 如果我 执行类似命令 ls l and who
  • 删除 ChildEventListener

    我正在使用 FirebasechildEventListener被添加 N 次到Node从数据库获取数据 现在我正在尝试删除childEventListener它似乎不起作用 我得到了重复的数据 query FirebaseDatabase
  • 如何将堆栈跟踪发送到 log4j?

    假设您捕获了一个异常 并在标准输出 例如控制台 上得到以下内容 如果您执行e printStackTrace java io FileNotFoundException so txt at java io FileInputStream
  • 如何修复实例上的错误:未定义的变量 B?

    我想编译此 Verilog 代码 但在实例中出现错误B模块中的MultiP module error 1 Undefined variable B error 2 near Adder1 syntax error unexpected ID
  • NSIS - 在命令行安装期间打印提示

    我正在使用 NSIS 为 Windows 制作安装程序 并且有许多用户可以使用命令行指定的自定义安装选项 例如 installer exe IDPATH c Program Files Adobe Adobe InDesign CS5 S
  • 在Application中显示Android application.apk的创建日期

    我正在开发一个android应用程序 我想显示版本 apk和日期现在我可以使用显示应用程序的应用程序版本PackageInfo现在我想显示应用程序创建的日期或 apk创建日期 对于新读者 public static String getAp
  • WPF 图片库

    我将驱动一个需要向用户呈现图像组的触摸屏应用程序 不是网络应用程序 我们的愿望是呈现具有页面前进 后退功能的 3x3 图像网格 他们可以选择一些 我将只展示这些图像 我没看到ListView完全符合我的要求 尽管 WPF 足够大 我很可能错
  • 具有通用存储库、依赖项注入和 SoC 的 EF6 Code First

    经过大量阅读和尝试之后Entity Framework最新稳定版本 6 1 1 我读到了很多关于是否使用存储库的矛盾EF6 or EF一般来说 因为它是DbContext已经提供了一个存储库并且DbSet the UoW 盒子外面 让我首先
  • Angular JSON 与 JSONP $promise

    如果我从我的controller js进行这个JSON调用 scope userInvestors userInvestors query UserID scope user uid function userInvestors conso
  • 列出 chrome 注册的 Service Worker

    有没有办法列出所有注册服务人员的浏览器 假设我已经注册 安装了一些服务人员 我可以通过js获取文件名数组列表吗 显然我找到了两种适合我的方法 对于 Chrome 一种是使用快捷命令 chrome serviceworker internal
  • MVVM 路由和中继命令

    两者有什么区别路由命令 http msdn microsoft com en us library system windows input routedcommand aspx and 中继命令 http msdn microsoft c
  • 使用 Cloudformation SAM 的 AWS::Serverless::Api 资源策略

    最近AWS宣布 是否可以将资源策略附加到通过 Cloudformation 使用 SAM 创建的 AWS Serverless Api 我还没有机会尝试这个 但我假设您可以像使用 S3 存储桶策略一样使用它 对你来说最棘手的部分是抓住api
  • 编译时映射和逆映射值

    有人可以推荐一种更优雅的方法来实现这些编译时常量吗 template