模板参数 constexpr 的显式指定参数无效

2023-12-14

我有一个static_loop像这样构造

template <std::size_t n, typename F> void static_loop(F&& f) {
    static_assert(n <= 8 && "static loop size should <= 8");
    if constexpr (n >= 8)
        f(std::integral_constant<size_t, n - 8>());
    if constexpr (n >= 7)
        f(std::integral_constant<size_t, n - 7>());
    if constexpr (n >= 6)
        f(std::integral_constant<size_t, n - 6>());
    if constexpr (n >= 5)
        f(std::integral_constant<size_t, n - 5>());
    if constexpr (n >= 4)
        f(std::integral_constant<size_t, n - 4>());
    if constexpr (n >= 3)
        f(std::integral_constant<size_t, n - 3>());
    if constexpr (n >= 2)
        f(std::integral_constant<size_t, n - 2>());
    if constexpr (n >= 1)
        f(std::integral_constant<size_t, n - 1>());
}


template <typename T> constexpr size_t tupleSize(T) { return tuple_size_v<T>; }
struct A {
    int a;
    int b;
    void run() {
        auto ab = std::make_tuple(std::ref(a), std::ref(b));
        static_loop<tupleSize(ab)>([&](auto i) { std::get<i>(ab) = i; });
        std::cout << a << " " << b << std::endl;
    }
};

但是,它无法迭代上面列出的元组。

活生生的神箭示例


建议:尝试使用

// .........VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
static_loop<std::tuple_size_v<decltype(ab)>>([&](auto i) { std::get<i>(ab) = i; });

我的意思是...你不能使用ab(作为值),在常量表达式中,因为ab没有定义constexpr.

而你无法定义它constexpr因为它是使用初始化的std::ref()那不是constexpr.

但你不感兴趣ab作为值来获取其类型的大小;你只对ab类型;这样你就可以通过decltype(ab).

- 编辑 -

题外话建议。

代替static_loop(),您可以使用基于的经典方法std::index_sequence(以及模板折叠,从 C++17 开始可用)。

我的意思是...如果你定义一个run_1()功能(与run_1_helper()助手)如下

template <typename F, typename ... Ts, std::size_t ... Is>
void run_1_helper (F const & f, std::tuple<Ts...> & t, std::index_sequence<Is...> const)
 { (f(std::get<Is>(t), Is), ...); }

template <typename F, typename ... Ts>
void run_1 (F const & f, std::tuple<Ts...> & t)
 { run_1_helper(f, t, std::index_sequence_for<Ts...>{}); }

你可以写A如下

struct A {
    int a;
    int b;
    void run() {
        auto ab = std::make_tuple(std::ref(a), std::ref(b));
        run_1([](auto & v, auto i){ v = i; }, ab);
        std::cout << a << " " << b << std::endl;
    }
};

或者,也许更好,简单地使用std::apply(), 如下

struct A {
    int a;
    int b;
    void run() {
        auto ab = std::make_tuple(std::ref(a), std::ref(b));
        int i { -1 };
        std::apply([&](auto & ... vs){ ((vs = ++i), ...); }, ab);
        std::cout << a << " " << b << std::endl;
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模板参数 constexpr 的显式指定参数无效 的相关文章

  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • 将带有破折号字符的 punycode 转换为 Unicode

    我需要转换 punycodeNIATO OTABD to n i ato I found JavaScript 中的文本转换器前几天 但是如果中间有破折号 punycode 转换将不起作用 有什么建议可以解决 破折号 问题吗 我花时间创建了
  • 防止 UIAlertController 被解雇

    我正在添加一个UITextField to a UIAlertController 它显示为AlertView 在驳回之前UIAlertController 我想验证输入UITextField 根据验证 我想驳回UIAlertControl
  • 理解条件逻辑

    我正在编写一个 python 程序 它接受计划英语中的给定句子并从中提取一些命令 现在很简单 但我从命令解析器中得到了一些意想不到的结果 经过一番研究后 我的条件逻辑似乎没有按照我的预期进行评估 当然 这是一种非常不优雅的方法 而且太冗长了
  • 等待 form.submit() / POST 完成

    我陷入了一个非常奇怪的境地 解释起来很复杂 但我会尽力 问题详细解释 在每次顶部导航单击 绿色甜甜圈 圆圈 或下一步按钮时 我必须提交表单 如果存在且有效 如果无效 form valid 会触发验证错误并返回 false 将停止任何进一步的
  • 命名参数顺序对于 MySql .Net 数据提供者有意义吗?

    我发现在我的项目中命名参数的顺序是有意义的 我称这个过程为 CREATE PROCEDURE test TestProc in myText varchar 5 in myText2 varchar 100 BEGIN END 如果我添加这
  • 如何通过 StatEt Eclipse 插件使用“R Graph Builder”和“R Graphics”视图?

    我是 R 新手 想要在 Windows 7 上使用 Eclipse 插件 StatEt 和 Oxygen 2 Release 4 7 2 我尝试使用 R Graph Builder 创建示例图 我单击 播放按钮 并在R Code标签 此外
  • 在 WebAPI 客户端中每次调用创建新的 HttpClient 的开销是多少?

    应该是什么HttpClientWebAPI 客户端的生命周期 拥有一个实例是否更好HttpClient多次通话 创建和处置的开销是多少HttpClient根据请求 如下例所示 取自http www asp net web api overv
  • 在没有 Outlook 的情况下发送 Outlook 会议请求?

    我只是想知道是否可以在服务器上未安装 Outlook 并使用 COM 互操作 我想不惜一切代价避免在服务器上安装 的情况下向人们发送会议请求 我们在 Windows 2003 域中拥有 Exchange 2003 并且所有用户都是域用户 我
  • 使用executeUpdate()而不是executeQuery()进行SELECT查询

    for Ex class sample public static void main String a Class forName sun jdbc odbc JdbcOdbcDriver Connection con DriverMan
  • pythonpyderconda安装失败

    我是 Python 新手 现在我使用 Anaconda Spyder 作为我的主要 Python 发行版 我正在学习如何使用 conda 安装 更新软件包 当我阅读相关书籍并在网上搜索时 似乎我需要做的就是输入 conda install
  • Discord.js,无法读取 null 的属性“user”

    我有一个麻烦 我根本无法理解 该功能在我的服务器上运行 但在另一台服务器上不起作用 这是我的代码 const user message author let servericon message guild iconURL let serv
  • 打印表达式并回显它

    我的意思是定义一个函数print echo取代print 这样除了打印表达式的结果之外 它还打印表达式本身 如果我只是将表达式作为字符串传递并使用eval inside print echo 它不会知道调用者函数的任何局部变量 我当前的代码
  • 为什么 Clang 自动向我的函数添加属性?

    我有一段代码正在尝试将其转换为 LLVM 位代码 int main volatile double n 0 45 for int j 0 j lt 32 j n j return 0 我对其运行以下命令 clang O0 S emit ll
  • 如何在 JSF2 中禁用 .css 和 .js 等静态资源的缓存?

    我正在尝试设置一个项目以不缓存静态资源 css 和 js 对于某些人来说 我们似乎遇到了一些内部缓存问题 我希望这可以解决这个问题 我有一个相位监听器 基本上是这个的稍微修改的版本http turbomanage wordpress com
  • 如何为Python数据框中选定的列着色?

    我正在使用下面的代码将 df 导出到 Excel 我需要对输出 Excel 中的特定列进行着色 DF TO EXCEL from pandas import ExcelWriter writer ExcelWriter Output xls
  • Symfony2.3 带 IN 子句的原始 sql 查询

    我试图使用 IN 子句的学说实体管理器运行原始 SQL 查询 如下所示 idSArray Array 0 gt 1 1 gt 2 stmt this gt getDoctrine gt getEntityManager gt getConn
  • 计算大文件的Md5哈希值

    我想让它变得非常清楚和简单 如果我有 1gb 内存并且我想计算 2gb 文件的 md5 哈希值怎么办 目前 我正在这样做 private static string Md5Hash byte input byte hash MD5 Crea
  • JwtSecurityTokenHandler 4.0.0 重大变化?

    这是 Linqpad 中 JwtSecurityTokenHandler 4 0 0 的简化测试 该代码与 JwtSecurityTokenHandler 3 0 2 配合良好 生成并验证了令牌 在 4 0 0 中 进行必要的更改后 我不断
  • 如何让RichTextBox只显示文本? [复制]

    这个问题在这里已经有答案了 可能的重复 如何防止richTextBox粘贴图像 如果您正在使用Richtextbox 有几个优点Richtextbox例如 我们可以在上面使用彩色字体 在区域中设置自定义字体 在其上附加文件 等 take a
  • 模板参数 constexpr 的显式指定参数无效

    我有一个static loop像这样构造 template