存储没有大小的字符串文字数组 - 关于数组大小的简单模板

2024-03-31

我正在探索存储没有 sidecar 大小信息的文字数组(任何类型)的方法。我已经概述了一些方法,但每种方法都有一些挥之不去的问题。这是最简单的方法,模板超过数组大小。请注意,这是一个简单的测试用例,实际的类可能具有其他成员、其他模板参数以及必须提供的模板参数。

template <size_t I>
struct A0 {
    std::array<const char*, I> a;
};

问题是大小与字符串文字分离,使得这些类型的错误太容易出现:

// error, not caught
auto a0 = A0<3>{{"1","2"}};

虽然以下初始化是有效的,但由于 C++20 不允许部分 CTAD,如果有任何模板参数,它就无法工作must被指定。它还用样板换样板:“”来交换“std::array”。如果不指定类型 CTAD 将无法推断出模板大小参数“I”。

auto a0 = A0{std::array{"1","2"}};

是否有扣除指南允许:

auto a0 = A0{{"1","2"}};

您可以创建一个模板构造函数,如果用户指定了不正确的参数数量,则该构造函数与用户定义的推导指南相结合,要么推导出正确的参数计数,要么导致编译器错误:

template <size_t I>
struct A0 {
    template<class ...Args>
    constexpr A0(Args...args)
        : a{ args... }
    {
        static_assert(sizeof...(args) == I, "parameter count does not match array size");
    }

    std::array<const char*, I> a;
};

template<class ...Args>
A0(Args...) -> A0<sizeof...(Args)>;

constexpr A0 a{ "1", "2", "3" };
static_assert(std::is_same_v<std::remove_const_t<decltype(a)>, A0<3>>, "expectation mismatch");

constexpr A0<4> a1 { "1", "2", "3" }; // compiler error: parameter count does not match array size
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

存储没有大小的字符串文字数组 - 关于数组大小的简单模板 的相关文章

  • 我的 std::hash for std::tuples...有什么改进吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有些人可能已经注意到 std hash 不支持元组 所以我添加了一个重载 它看起来比我到目前为止看到的解决方案 更好 有人有进一步减少这段代码的
  • Visual Studios 2015 中的“恢复 NuGet 包”没有执行任何操作

    我将解决方案从 SVN 拉入 Visual Studios 2015 代码中的一些 使用 引用出现错误 因此我尝试在右键单击 解决方案 中的解决方案时运行 恢复 NuGet 包 选项探索者 这没有任何作用 我必须手动进入 nuget 管理器
  • getline 之后返回到文件开头

    所以我已经从文件中读取了所有行 while getline ifile line logic 其中 ifile 是 ifstream line 是字符串 我的问题是我现在想再次使用 getline 并且似乎无法返回到文件的开头 因为运行 c
  • 如何通过覆盖 MSBuild 目标来防止外语资源生成?

    我正在致力于减少大型 C ASP NET 解决方案的编译时间 我们的解决方案使用通常的 resx 文件方法翻译成大约十几种外语 这些资源文件的解析和编译极大地减慢了我们的编译时间 并且是日常的挫败感 我知道可以创建自定义资源提供程序并摆脱
  • C# 异步任务比同步慢

    你知道为什么同步斐波那契方法比异步 等待更快并且比异步任务更快吗 我在每个项目方法上都使用了异步 所以主要是这是一个非常糟糕的方法 Code static int FibonacciSync int number if number 0 r
  • Qt/c++ 随机字符串生成[重复]

    这个问题在这里已经有答案了 我正在创建一个应用程序 需要生成多个随机字符串 几乎就像一个由一定长度的 ASCII 字符组成的唯一 ID 这些字符混合有大写 小写 数字字符 有没有 Qt 库可以实现这一点 如果没有 在纯 C 中生成多个随机字
  • 如何使用c#从数据桶中获取所有文档?

    如何获取数据桶中的所有文档 我尝试过一个示例 但我只能获得一个特定的文档 这是我的代码 CouchbaseClient oclient oclient new CouchbaseClient vwspace data bucket name
  • 如何通过 libwebsocket 发送异步数据?

    我正在将 Warmcat 的 libwebsocket C 库用于小型 Websocket 服务器 我已经启动并运行了这些示例 并且可以发送数据以响应从 websocket 接收数据 例如回显发送的反向字节 但是 我无法弄清楚如何在不使用
  • C++ 指针和对象实例化

    这有效 MyObject o o new MyObject 而这并不 MyObject o new MyObject Why 关键词new 返回一个指针 http msdn microsoft com en us library kewsb
  • 从内存流播放视频文件

    只是好奇看看这是否可能 我有一个 Windows 应用程序 它从我的电脑上的 avi 文件读取所有字节 然后将其存储在 byte 中 现在我的内存中有 avi 文件 我想直接从内存将其加载到某种视频播放器控件中 我尝试过使用 wmplaye
  • 为什么 BinaryFormatter 可以序列化 Action<> 但 Json.net 不能

    尝试序列化 反序列化 Action 尝试我的 1天真 JsonConvert SerializeObject myAction JsonConvert Deserialize
  • 如何调试.NET Windows Service OnStart方法?

    我用 NET 编写的代码仅在作为 Windows 服务安装时才会失败 该故障甚至不允许服务启动 我不知道如何进入 OnStart 方法 如何 调试 Windows 服务应用程序 http msdn microsoft com en us l
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • 模板与非模板类,跨编译器的不同行为

    我在一些应用程序中使用编译时计数器 它确实很有用 昨天我想用 gcc 编译一个程序 我之前使用的是 msvc 并且计数器的行为在模板类中发生了变化 它在模板类中不再工作 过于简化的代码 Maximum value the counter c
  • 本地时间的内存需要释放吗?

    void log time t current time 0 tm ptm localtime current stuf 只是想确定 我是否需要在方法结束时释放 tm 指针分配的内存 不 你不应该释放它 该结构是静态分配的 检查文档 htt
  • 使用 dateTimePicker 在 DataGridView 中编辑日期

    我有一个DateTime我的 WinForms 中的专栏DataGridView 目前只能通过手动输入日期来编辑该字段 例如 2010 09 02 需要什么才能拥有一个DateTimePicker 或同等 用作编辑器 DataGridVie
  • 在 C# .NET 中对非 ASCII 字符进行编码

    我想向我的应用程序发送的电子邮件添加自定义标头 标头名称只能包含 ASCII 字符 但对于值和用户可能会输入 UTF 8 字符 我必须对它们进行 Base64 编码 此外 我还必须将它们解码回 UTF 8 以便在 UI 中向用户显示它们 最
  • 基础设施 - 同步和异步接口和实现? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在实现库 基础设施时 并且该 API 的用户希望同步和异步使用代码 我读到混合同步和异步并不是一个好主意 例如 同步实现包括等待异步实现 显然
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 如何根据当前日期时间发现财政年度?

    我需要基于当前或今天的日期时间的财政年度 假设我们认为今天的日期是10 April 2011 那么我需要输出为Financial Year 2012在某些情况下 我需要以短格式显示相同的输出FY12 我想以两种方式显示 在我们的要求中 考虑

随机推荐

  • 在客户端使用带有 GWT 的 3rd 方库?

    我开始使用 GWT 想知道哪些库可以在客户端与 GWT 一起使用 因为 GWT 将 Java 代码转换为 JavaScript 所以如果您只使用客户端 我真的无法想象所有转换都是可能的 当然 您不想在实际应用程序中使用客户端的所有内容 但我
  • 为什么 NSURLConnection 失败并出现错误 Domain=NSURLErrorDomain Code=-1005 “网络连接丢失。”

    我收到错误 Error Domain NSURLErrorDomain Code 1005 The network connection was lost UserInfo 0x10e74380 NSLocalizedDescription
  • 如何在 Eclipse 中启用索引下载以进行 Maven 依赖项搜索? [复制]

    这个问题在这里已经有答案了 我正在使用带有 m2e 插件的 Eclipse Luna 当我搜索依赖项时 我收到以下警告 另请参阅后面的屏幕截图 索引下载被禁用 搜索结果可能不完整 如何启用索引下载 在 Eclipse 中 单击窗口 gt 首
  • 如何解码不同类型的 JSON 属性? [复制]

    这个问题在这里已经有答案了 我有一个 JSON tvShow id 5348 name Supernatural permalink supernatural url http www episodate com tv show super
  • 警告未使用的 using 语句的静态分析规则是什么?

    当文件中的任何对象不再引用 using 语句时 是否有任何 FxCop 或 StyleCop 会发出警告 您可以启用该规则IDE0005 C Using directive is unnecessary 在类别中Style
  • 在 Jasper 报表上的表中显示 JSON 数组

    我正在尝试使用由 JAVA 函数传递的 JSONDatasource 创建 JasperReport 这是我发送给 jasper 的 JSON Person FirstName John LastName Smith Contacts Ty
  • XML、命名空间和 E4X

    有人可以解释一下 XML 中的命名空间 xmlns 到底有什么用 以及如何使用它们在使用 E4X 导航 XML 时使用它们 最好在 ActionScript 3 中 我无法完全理解它们的目的和用途 理论上 XML命名空间是用来避免与标签名称
  • 如何在tensorflow v2中启用cuda统一内存

    In tensorflow1 x 有一个选项 例如use unified memory and per process gpu memory fraction这有可能触发 CUDA UVM 的使用 但这怎么能在tensorflow 2 0
  • 使用 Moq 重写同一类中的虚拟方法

    我们正在使用 Moq 来对我们的服务类进行单元测试 但仍停留在如何测试服务方法调用同一类的另一个服务方法的情况 我尝试将被调用的方法设置为虚拟 但仍然不知道在最小起订量中要做什么 例如 public class RenewalService
  • 如何创建一个 Grid,其 X 轴和 Y 轴绑定到不同的集合?

    我需要显示一些内容 其中沿列显示一周的天数 沿行显示类别列表 以及单元格中到期的任务列表 参见下面的草图 我觉得解决方案应该很简单 但对于如何绑定这样的东西我还是一片空白 单元格中的行 列和数据项都是动态的 具体取决于用户正在查看的周 理想
  • 无法转换 COM 对象 - Microsoft Outlook 和 C#

    我编写了这段代码来查看 Outlook 邮箱中的未读邮件 代码如下 Microsoft Office Interop Outlook Application app Microsoft Office Interop Outlook Item
  • 上传压缩图片

    我是安卓新手 我创建了一个应用程序来将图像上传到服务器 它非常适合小尺寸图像 但对于较大图像 gt 1 MB 这不起作用 这是我上传图片的功能 class UploadFile extends AsyncTask
  • 在android studio 0.2.8中导入外部库

    我试图将外部库导入到 android studio 中的 android 项目中 这里的许多答案都说它可以从设置中的项目结构中的模块完成 但是自 0 2 8 更新以来 项目结构中没有库 模块 我现在如何导入外部库 也许这是 0 2 8 更新
  • 将数据获取到复杂性:未调用 ExtensionDelegate

    看起来前几周其他人也遇到过这个问题 但我还没有找到任何解决方案 我正在尝试做一件非常基本的事情 将数据从我的 iOS 应用程序或我的 Watch 应用程序获取到我的复杂功能控制器 事实证明 我完成这件事的能力比我想象的要差得多 watchO
  • pub get 错误:无法创建链接...(操作系统错误:函数不正确)

    我在尝试获取 Angular dart Codelab 的包时遇到错误 10 01 28 Running pub get Pub get failed 1 Resolving dependencies Cannot create link
  • Flyway 在空模式上发现非空模式

    我正在尝试实施数据库迁移Flyway 4 2 0 Oracle 11g 我有这个空架构 当我尝试迁移时 Flyway 说 造成原因 org flywaydb core api FlywayException 发现非空 模式 PASHA 没有
  • 具有 CSS 变量的 SVG 半径或位置

    是否可以在 SVG 中使用 CSS 变量来操作 中的半径或位置 等值属性样式 一个元素 例如 在下面的代码中 我添加了一个 CSS 颜色变量 dark text clr和一个半径变量 radius 当我使用填充中的颜色 CSS 变量 htt
  • JavaFX HBox 对齐

    我一直在使用 JavaFX 开发一个软件 但我遇到了一个愚蠢但令人担忧的问题 在代码的某些部分我有一个HBox 并且 其中包含三项 image a label and a VBox 问题是我想要image向左对齐 即紧挨着左边距window
  • 无法在 mac osx 10.10 上构建 python gevent

    概要 pip install gevent不起作用 深入挖掘 我下载了gevent tar gz并手动运行构建 python setup py build 得到同样的错误 running build running build py run
  • 存储没有大小的字符串文字数组 - 关于数组大小的简单模板

    我正在探索存储没有 sidecar 大小信息的文字数组 任何类型 的方法 我已经概述了一些方法 但每种方法都有一些挥之不去的问题 这是最简单的方法 模板超过数组大小 请注意 这是一个简单的测试用例 实际的类可能具有其他成员 其他模板参数以及