在编译时将 std::array 转换为另一种数据类型?

2024-01-08

C++11 中是否有一种方法可以在编译时将一种类型的数组转换为另一种数据类型:

#include <iostream>
#include <array>
#include <type_traits>

int main()
{
   static constexpr std::array<double, 3> darray{{1.5, 2.5, 3.5}};
   static constexpr std::array<int, 3> iarray(darray); // not working
   // Is there a way to cast an array to another data type ? 
   return 0;
}

不,但是您可以使用以下命令相当轻松地手动完成指数技巧 http://loungecpp.wikidot.com/tips-and-tricks:indices,假设实现提供constexpr std::get(或等效地constexpr超载的operator[]):

#include <iostream>
#include <array>
#include <type_traits>

// http://loungecpp.wikidot.com/tips-and-tricks%3aindices
template <std::size_t... Is>
struct indices {};
template <std::size_t N, std::size_t... Is>
struct build_indices: build_indices<N-1, N-1, Is...> {};
template <std::size_t... Is>
struct build_indices<0, Is...>: indices<Is...> {};

template<typename T, typename U, size_t i, size_t... Is>
constexpr auto array_cast_helper(
   const std::array<U, i> &a, indices<Is...>) -> std::array<T, i> {
   return {{static_cast<T>(std::get<Is>(a))...}};
}

template<typename T, typename U, size_t i>
constexpr auto array_cast(
   const std::array<U, i> &a) -> std::array<T, i> {
   // tag dispatch to helper with array indices
   return array_cast_helper<T>(a, build_indices<i>());
}

int main() {
   static constexpr std::array<double, 3> darray{{1.5, 2.5, 3.5}};
   static constexpr std::array<int, 3> iarray = array_cast<int>(darray);
}

如果您的实现没有提供constexpr get or operator[],你不能使用array因为当前没有访问数组元素的标准方法constexpr;你最好的选择是使用你自己的实现arrayconstexpr扩展。

The constexpr建议添加库以添加到标准中n3470 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3470.html.

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

在编译时将 std::array 转换为另一种数据类型? 的相关文章

  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • 如何使用recv()检测客户端是否仍然连接(并且没有挂起)?

    我写了一个多客户端服务器程序C on SuSE Linux 企业服务器 12 3 x86 64 我为每个客户端使用一个线程来接收数据 我的问题是 我使用一个终端来运行服务器 并使用其他几个终端来运行服务器telnet到我的服务器 作为客户端
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 为什么拆箱枚举会产生奇怪的结果?

    考虑以下 Object box 5 int int int box int 5 int nullableInt box as int nullableInt 5 StringComparison enum StringComparison
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • 在 Javascript 中减少/分组数组

    基于this https stackoverflow com a 40774906 3254598例如 我想以稍微不同的方式按对象进行分组 结果应该如下 key audi items make audi model r8 year 2012
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 双精度类型二维多维数组的 pinvoke 编组作为 c# 和 c++ 之间的输入和输出

    我有以下我正在尝试解决的双物质类型的 2d 多维数组的 c 和 c pinvoke 编组 我已经查看了以下热门内容以获得我目前拥有的内容使用双精度数组进行 P Invoke 在 C 和 C 之间编组数据 https stackoverflo
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在

随机推荐

  • JPA Native 查询获取单个对象

    如何使用 JPA Native 查询获取单个对象 我做了一些研究 但所有给出的答案都是使用 getSingleResult 但它没有返回我想要得到的东西 例如 如果我想获取数据库中表的计数并将其提取到整数中 我该怎么办 下面的代码显示了我如
  • Nginx 使用 CORS 和凭据

    我正在构建一个通过 Nginx 服务器与 Laravel API 进行通信的 Web 应用程序 我尝试按照 Nginx 网站上的说明进行操作完全开放的科尔斯 https enable cors org server nginx html 但
  • 无法解析符号 WebSecurityConfigurerAdapter

    我尝试在我的 java 应用程序中创建基本身份验证 对于他们 我在 gradle 文件中使用了这个依赖项 dependencies compile group org springframework boot name spring boo
  • Netlogo HPC CPU 使用百分比增加

    我通过以下方式使用无头 NetLogo 将作业提交到 HPC 服务器code bin bash N r20p q all q pe mpi 24 home abhishekb netlogo netlogo 5 1 0 netlogo he
  • RuntimeException 未安装 Zip PHP 扩展

    我是 Linux 新手 我刚刚安装了 Composer 和 Laravel 但是当我运行laravel new project我收到以下错误 RuntimeException The Zip PHP extension is not ins
  • 如何将 Jupyter 中的数据框导出为 csv 文件

    我有一个数据框另存为df在 jupyter 笔记本中 我想将其导出到桌面上的 csv 文件中 对于 pandas 数据框 您可以使用df to csv data csv https pandas pydata org pandas docs
  • 已发布并等待 RabbitMQ / EasyNetQ 主题的回复 - 如何仅获取您的主题?

    当发布者期望得到消息的答案时 如何确保在扩展时它只能得到 与其自己的消息相关的 答案 我们有一个客户端进程 它发布一条消息以供服务器进程应答 此外 我们有一个 监听器 进程 只需要消耗问题和答案 而不需要发布任何内容 此外 服务器进程将来可
  • 如何在量角器中等待元素启用

    尝试单击按钮时量角器失败 最初 该按钮将处于禁用状态 稍后它将被启用 量角器认为该按钮已准备好并单击该按钮并失败 所以我希望量角器脚本等到按钮启用 我在下面尝试过 但没有成功 有人可以发布完整的代码来等待该元素被启用吗 expect bro
  • Apple 是否提供其使用的本地化术语索引?

    Apple 是否为开发者提供了一套不同语言的标准术语 我之所以问这个问题 是因为我正在对应用程序的部分内容进行本地化 并且希望在整个应用程序中一致应用标准术语 我采用了一些策略 通过更改设备上的语言并观察 Apple 如何用其他语言解释这些
  • 从 R 读取 .npz 文件

    I save npz来自 Python 的文件并想在 R 中读取它 我尝试使用npyLoad功能 但我收到此错误 library RcppCNPy Data lt npyLoad xx npz Error in npyLoad xx npz
  • 在 Objective-C 中封装 C 库的技巧

    我有一个用 C 编写的库 我想在 Mac 或 iPhone 上的 Objective C 应用程序中使用它 不幸的是 由于该库是由开源领域的个人编写的 因此文档非常稀疏且不完整 虽然我可以弄清楚如何使用库中的内容 但我并没有真正了解整个代码
  • 使用常量内存在 O(n) 内对 BST 进行排序

    这不是作业 只是一个有趣的任务 给定一个由数组表示的完全二叉搜索树 使用常量内存在 O n 内对数组进行排序 Example Tree 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15 阵列 8 4 12 2 6 10
  • ASP.NET MVC - 如何从不同的控制器维护 ModelState?

    我有一个带有 Index 操作的 HomeController 该操作显示 Index aspx 视图 它有一个用户名 密码登录部分 当用户单击提交按钮时 它会 POST 到 AccountController 中的登录操作 在此操作中 它
  • 如何处理 Rails 应用程序的长请求,以便其他用户不会延迟太多?

    我在 Heroku 上有一个免费的 Rails 应用程序 它最近开始吸引一些用户 我的应用程序中的一个事件涉及查询另一个 API 最多可能需要 10 秒才能完成 如何确保同时访问简单页面的其他用户 作为另一个用户的 API 事件 不需要等待
  • 通过点击另一个标签来更改 html 标签的样式

    我有以下代码 parentAppliance 是主左侧导航表的一部分 将鼠标悬停在 Appliance 上时 我会看到一个包含 health 的子表 现在我希望当我点击健康时子表消失 有什么想法吗 CSS childAppliance di
  • 如何从源树中删除所有存储的密码

    我想从 SourceTree 中删除所有存储的密码 有什么办法可以删除所有的用户名和密码吗 None
  • 正则表达式随后捕获字符之前的第一个单词 - Postgresql

    参考这个问题 https stackoverflow com questions 66153909 regex capture first words before character subsequently 66154015但现在在 p
  • 如何创建在测试 Web 应用程序时使用的自签名 SSL 证书

    如何创建自签名 SSL 证书供 Apache 服务器在测试 Web 应用程序时使用 如何创建自签名 SSL 用于测试目的的证书 from http httpd apache org docs 2 0 ssl ssl faq html sel
  • Serilog 记录器接收器的最小和最大级别

    我们发现restrictedToMinimumLevel属性存在于 Serilog 中 但它是否也支持最大级别属性 之前我们已经使用过NLog其具有最小和最大日志记录级别 https github com NLog NLog wiki Co
  • 在编译时将 std::array 转换为另一种数据类型?

    C 11 中是否有一种方法可以在编译时将一种类型的数组转换为另一种数据类型 include