std::条件编译时分支评估

2023-11-26

编译这个:

template < class T, class Y, class ...Args >
struct isSame
{
    static constexpr bool value = std::conditional<
                                      sizeof...( Args ),
                                      typename std::conditional<
                                          std::is_same< T, Y >::value,
                                          isSame< Y, Args... >, // Error!
                                          std::false_type >::type,
                                      std::is_same< T, Y > >::type::value;
};

int main()
{
    qDebug() << isSame< double, int >::value;
    return EXIT_SUCCESS;
}

给我这个编译器错误:

error: wrong number of template arguments (1, should be 2 or more)

问题是isSame< double, int >有一个空的Args参数包,所以isSame< Y, Args... >实际上变成isSame< Y >这与签名不匹配。

但我的问题是:为什么要评估该分支?sizeof...( Args ) is false,所以内std:conditional不应该被评估。这不是运行时代码,而是编译器knows that sizeof..( Args ) will never be true与给定的模板类型。

如果你好奇的话,它应该是一个可变版本std::is_same,并不是说它有效...


但我的问题是:为什么要评估该分支?

因为没有评价,那根本就不是分支。这是一个模板及其实例化以成功实例化std::conditional模板.
我在这里的意思是,在编写模板元程序时,评估抽象很有用,但您永远不应该忘记模板系统真正在做什么.

如果您需要有条件地实例化可能格式不正确的模板,请添加间接级别。查看this回答一个例子。

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

std::条件编译时分支评估 的相关文章

  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • 私有模板函数

    我有一堂课 C h class C private template
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了

随机推荐

  • 如何从MySQL中的select中删除?

    此代码不适用于 MySQL 5 0 如何重写它以使其工作 DELETE FROM posts where id SELECT id FROM posts GROUP BY id HAVING COUNT id gt 1 我想删除没有唯一 I
  • 嘲笑单例类

    我最近读到 创建一个类单例使得无法模拟该类的对象 这使得测试其客户端变得困难 我无法立即理解根本原因 有人可以解释一下是什么使得无法模拟单例类吗 另外 与创建类单例相关的还有其他问题吗 当然 我可以写类似的东西不要使用单例 它们是邪恶的 使
  • 一项工作中的错误会通过 mclapply 污染其他工作

    When mclapply X FUN 遇到某些值错误X 错误会传播到其他一些 但不是全部 值X require parallel test lt function x if x 3 stop else x mclapply 1 3 tes
  • 在 StringComparison 和 StringComparer 之间转换的优雅方式?

    一些 NET 方法使用字符串比较作为参数 有些使用字符串比较器 通常以以下形式比较器 差异是显而易见的 有没有一些优雅的方式如何获得字符串比较 from 字符串比较器或相反亦然 我总是可以编写使用的简单方法Case声明 但也许 NET 中已
  • React 组件中出现意外的标记“=”[重复]

    这个问题在这里已经有答案了 我可能缺少装载机吗 我认为我们应该能够在组件体中使用这些 ES6 函数 以避免必须执行 bind this syntax 反应文档 ERROR in client admin side components Fo
  • 用于可视化数学方程的库(如方程编辑器)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一个 C 库 它将为我提供方程编辑器功能 我不是在寻找数学库来评估数学表达式 有什么建议么 我建议使用我的 WPF Math 分支 我已经
  • setTimeout()和设置参数

    我有一些 jQuery 代码 如下所示 mainNav2 gt li mouseleave function var someNum Math random this attr id someNum var t setTimeout Hid
  • div 上的滚动条带有溢出:自动和百分比高度

    是否可以创建一个可以根据浏览器大小进行调整并且可以滚动的 div 我想用overflow auto关于 div 和百分比高度90 页面的结构是 div style height 100 headerinfo div div style he
  • 如何更改 iOS 自动更正建议的颜色?

    经过在这里 网络和开发者论坛上的大量搜索后 我不敢相信以前似乎没有人问过这个问题 无论 UITextField 或 UITextView 或其他任何内容的颜色如何 iOS 自动更正建议始终会以白色背景上的蓝色字体弹出 有时这看起来很糟糕 例
  • 从多维数组中删除重复的元素对

    我有一个看起来像这样的数组 1 coordinates 16 343345 35 123523 2 14 325423 34 632723 3 15 231512 35 426914 4 16 343345 35 123523 5 15 2
  • php 将日期时间转换为 UTC

    我需要一种简单的方法将日期时间戳转换为 UTC 从服务器所在的任何时区 希望不使用任何库 Use 斯特托时间从给定字符串 解释为本地时间 生成时间戳并使用gmdate将其作为格式化的 UTC 日期返回 Example 根据要求 这是一个简单
  • 如何在 Electron 应用程序中嵌入 mac 应用程序扩展?

    我正在尝试嵌入一个Finder 同步扩展在我的应用程序中用 Swift 编写Electron 我怎样才能让他们一起工作并相互沟通 我读过苹果文档但它只解释了如何将目标添加到本机应用程序 我还注意到我可以手动注入 appex应用程序中的编译文
  • 是否有任何谈论数字文字后缀的 C++ 风格指南?

    在我读过的所有 C 风格指南中 我从未见过任何有关数字文字后缀的信息 即3 14f 0L ETC 问题 是否有任何风格指南谈论其用法 或者是否有通用约定 我偶尔会遇到f图形编程中的后缀 编程领域类型的使用有什么趋势吗 我所知道的唯一已建立的
  • 我的 Google Apps 脚本如何由与工作表共享的其他人运行?

    我有一个非常适合我的 Google Apps 脚本 与该工作表共享的其他尝试使用它的人会收到以下消息 您无权执行该操作 请问楼主 此项目授予您访问权限 该脚本用于使用新数据行更新现有工作表 它是使用添加到 UI 的菜单项触发的 并执行以下操
  • 保存应用程序上下文实例是一个不好的做法吗?

    根据我的理解 Android 中的应用程序是一个单例 如果我错了 请纠正我 并且我们始终只有一个应用程序上下文实例 那么 从这个角度来看 将应用程序上下文保存在我的 Application 类中是一个不好的做法吗 它会导致大量内存泄漏吗 这
  • 在 PHP 中使用 IMAP 获取唯一的电子邮件 ID

    如何计算 IMAP 帐户中每封电子邮件的唯一 ID 字符串 我正在制作一个脚本 必须经常将所有丢失的邮件从一个 IMAP 帐户复制到另一个帐户 我想避免每次更新都重复 因此我必须确定一个帐户上的内容和另一个帐户上的内容 并非所有电子邮件都有
  • 为什么 ZipInputStream 无法读取 ZipOutputStream 的输出?

    我被这个junit测试困住了 public void test throws Exception ByteArrayOutputStream out new ByteArrayOutputStream ZipOutputStream zip
  • ios应用程序用icu编译sqlite fts,但是当我输入像“z”这样的字母时它无法得到完美的答案

    在sqlite我中 执行一个create virtual MyTable tokenize icu id text subject text abstract text 然后就成功了insert info MyTable id subjec
  • ajax成功后重新加载数据表

    我使用 JQuery 数据表 我在ajax成功时将数据发送到json文件中的数据表onclick 第一次单击一切都很好 但下一次单击我只得到正确的数据和dataTables info的错误值 它始终显示dataTables info的第一个
  • std::条件编译时分支评估

    编译这个 template lt class T class Y class Args gt struct isSame static constexpr bool value std conditional lt sizeof Args