具有隐式数组大小的模板参数

2024-04-19

下面是一个简化的模板类,它接受数组作为模板参数。但是我还必须传递数组的大小作为参数。我想自动推导它并只写:

const char *TextArray[] = { "zero", "one", "two" };

Array<TextArray> a;

在实际实现中,类在编译时知道 TextArray 的大小,这是必需的(因为在编译时它会被检查并与类中的其他项配对)。如果我指定了错误的大小,我会正确地得到编译器错误:

Array<100, TextArray> a;

类定义:

#include <iostream>

template <std::size_t N, const char * (&A)[N]>
class Array
{
public:
    auto getCount()
    {
        return N;
    }
    auto getAt(std::size_t n)
    {
        return A[n];
    }
};


const char *TextArray[] = { "zero", "one", "two" };

int main() {
    Array<sizeof(TextArray)/sizeof(TextArray[0]), TextArray> a;

    printf("a.getCount() is %zu\n", a.getCount());
    printf("a.getAt(1) is %s\n", a.getAt(1));
}

Output:

a.getCount() 为 3

a.getAt(1) 是一

解决方案是使用宏,但我不想污染全局范围。一个简单的改进是更新类,以便我编写:

Array<sizeof(TextArray), TextArray> a;

在 gcc、Visual Studio、clang 上使用 C++17


您可以使用auto在模板参数中 https://stackoverflow.com/questions/38026884/advantages-of-auto-in-template-parameters-in-c17自 C++17 起,例如

template <auto &A>
class Array
{
public:
    auto getCount()
    {
        return std::size(A); // also C++17 feature, #include <iterator>
    }
    auto getAt(std::size_t n)
    {
        return A[n];
    }
};

顺便说一句,你最好明确地强制转换a.getCount() to unsigned来匹配%u说明符。

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

具有隐式数组大小的模板参数 的相关文章

  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 使用日期 Swift 3 对字典数组进行排序

    我有一个名为 myArray 的数组 其中添加了字典 我希望该字典按时间排序 这是字典中的键 那个时间是在 String 中 时间的日期格式为 yyyy MM dd HH mm ss 我尝试使用下面的代码解决方案 但给出了 从 字符串转换
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 如何计算 3D 坐标的线性索引,反之亦然?

    如果我有一个点 x y z 如何找到该点的线性索引 i 我的编号方案是 0 0 0 是 0 1 0 0 是 1 0 1 0 是最大 x 维度 另外 如果我有一个线性坐标 i 我如何找到 x y z 我似乎无法在谷歌上找到这个 所有结果都充满
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现

随机推荐

  • ASyncTasks 阻塞其他任务

    我有 2 个 ASyncTasks 一个从 httpPost 检索值 另一个更新 UI 的一些元素 包括列表视图 问题是 由于两个 ASyncTasks 共享相同的后台线程 如果网络操作首先启动并且运行缓慢 由于网络连接不良 其他后台线程花
  • 获取 IndexError:字符串索引超出范围

    我不知道为什么我会得到一个 IndexError 字符串索引超出范围 用这个代码 s oobbobobo a 0 for b in range len s 1 if s b b and s b 1 o and s b 2 s b a 1 e
  • iPhone 的文本转语音库 [重复]

    这个问题在这里已经有答案了 可能的重复 iPhone 上的文字转语音 https stackoverflow com questions 416064 text to speech on iphone 如何开始进行文本到语音转换iPhone
  • Ansible 手册:错误! “command”不是 Play 的有效属性[重复]

    这个问题在这里已经有答案了 我只是想写一个基本的剧本 并不断收到下面的错误 尝试了很多东西但仍然无法做到正确 我知道这一定是语法问题 但不知道在哪里 这是我的代码 This playbook runs a basic DF command
  • 使用PHP函数发送邮件时中继不允许的消息

    我正在使用 wamp 服务器并尝试使用 PHP 函数发送电子邮件mail email protected cdn cgi l email protection my subject my body 具有以下设置php ini SMTP IS
  • Cookie 是否可以保护令牌免受 XSS 攻击? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在为基于浏览器的 Javascript Web 应用程序构建基于 JWT JSON Web 令牌 的身份验证机制 使用无状态服务器
  • AngularJS 中 $routeChangeStart 的 Jasmine 单元测试用例

    嗨 我正在使用构建一个应用程序AngularJS现在我开始对我的应用程序进行单元测试 我知道如何为服务 控制器等编写单元测试用例 但我不知道如何编写它 routeChangeStart 我的 app js 中有以下代码 app run fu
  • 如何将单词和向量手动添加到Word2vec gensim?

    比方说 word2vec模型是我训练过的 word2vec 模型 当词汇表之外的单词 oov word 发生时 我计算一个向量vec using 计算向量 oov word 方法 现在 我想添加 追加oov word及其对应的向量vec到我
  • 当文件更改时,我可以让 docker-compose 重新启动容器吗?

    Docker compose 很好用docker composer up d将重新启动所有容器docker compose yml已经改变 但是 如果我更改了 它就不会拾取traefik toml我的容器之一需要在启动时读取 是否可以有do
  • Azure 上云服务的静态 IP [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个Cloud Service具有工人角色 云服务设置为可扩展到 5 个实例 有一项操作需要从 Azure 到我们的数据中心进行通信
  • 在字符数组中包含 char 的十进制等效项

    如何使用字符的十进制 十六进制表示形式而不是实际字符创建字符数组 我问的原因是因为我正在编写 C 代码 并且我需要创建一个包含英语中未使用的字符的字符串 然后该字符串将被解析并显示到 LCD 屏幕上 例如 0 解码为 0 n 解码为 10
  • 在 bootstrap 模式中使用 ajax 加载内容

    我正在尝试使用 ajax 让我的引导模式检索数据 a href img src alt Birthdays height 120 width 109 a 我的模式 div class modal hide div
  • 何时使用 ErrorException 与 Exception?

    PHP 5 1引入了错误异常 http php net manual en class errorexception php 两个函数的构造函数不同 public construct string message int code 0 Ex
  • node-gyp 配置得到“gyp ERR!找到 VS”

    我正在尝试开始有关节点 c c 附加组件 这node gyp命令出错 我已经安装了vs2019 我的命令是 node gyp configure msvs version 2019 详细输出是 gyp info it worked if i
  • @Override 注解的问题

    我正在制作一个类似于 Banko 小程序的 Java 应用程序 当我点击 public void init 方法时 我进展顺利 当我完成后 除此之外的所有内容都已编译完毕 它告诉我添加 Override 注释 我尝试过 但每当我这样做时 无
  • 如何在 Android 中创建 https 连接?

    我在 Stackoverflow 中找到了很多帖子 但无法找到适用的解决方案 如何在 Android 中创建 https 连接 代码是 HttpParams httpParameters new BasicHttpParams ConnMa
  • ComponentDidUpdate 使用情况和最大更新深度超出

    我有一个设置屏幕 我可以从用户那里获取一些信息 例如年龄 体重和性别 在获得这些信息后 我计算用户每天应该喝多少水 我想自动计算这个金额 而不需要任何计算按钮 不变违规 超出最大更新深度 当组件在 componentWillUpdate 或
  • 无法使用我的机器的 IP 地址运行我的 Node.Js 应用程序,但可以使用 localhost

    所以我设置了一个 Node js 应用程序来侦听我机器的端口 5050 所以当我去http localhost 5050 myapp http localhost 5050 myapp我的应用程序加载良好 我使用的是express框架 因此
  • rel-canonical 还应该包括协议 (http/https) 吗?

    我正在将我的网站从 http 迁移到 https 尽管它仍然支持通过 http 访问 目前我的所有页面都在 HTML 中设置了准确的 rel canonical 元标记 但显然它们都指向规范的 http url 我现在是否也应该将它们更新为
  • 具有隐式数组大小的模板参数

    下面是一个简化的模板类 它接受数组作为模板参数 但是我还必须传递数组的大小作为参数 我想自动推导它并只写 const char TextArray zero one two Array