“Inverse SFINAE”以避免不明确的过载

2024-06-18

如果第二个模板实例化,如何防止下面的第一个模板实例化? (即如果两者static_cast<T>(0) and T::zero()已定义)

template<typename T>
auto zero() ->decltype(static_cast<T>(0)) {
    return static_cast<T>(0);
}

template<typename T>
auto zero() ->decltype(T::zero()) {
    return T::zero();
}

如果您需要将其扩展到多个重载并对重载等级进行细粒度控制,则常见的技术是使用标签调度。

template<int r>
struct rank : rank<r - 1> {};

template<>
struct rank<0> {};

template<typename T>
auto zero_impl(rank<0>) -> decltype(static_cast<T>(0)) {
    return static_cast<T>(0);
}

template<typename T>
auto zero_impl(rank<1>) ->decltype(T::zero()) {
    return T::zero();
}

template<typename T>
auto zero() { return zero_impl<T>(rank<10>{}); }

派生到基类的转换将优先选择最接近的基类。这意味着调用具有最高等级的重载。因为在编译器看来,这将具有最佳的隐式转换序列。

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

“Inverse SFINAE”以避免不明确的过载 的相关文章

  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • 如何使用MemoryCache代替Timer来触发一个方法?

    以下方法通过等待已运行操作的结果来处理并发请求 对数据的请求可能会使用相同 不同的凭据同时出现 对于每组唯一的凭据 最多可以有一个GetCurrentInternal呼叫正在进行中 当准备就绪时 该呼叫的结果将返回给所有排队的服务员 pri
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 如何重定向到另一个页面并从表中传递 url 中的参数?

    如何重定向到另一个页面并从表中传递 url 中的参数 我在龙卷风模板中创建了类似的东西 table thead tr th Username th th Nation th th Rank th th th tr thead tbody f
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • 英特尔 Pin 与 C++14

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

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • 字典查找抛出“索引超出数组范围”

    我收到了一个错误报告 该报告似乎来自以下代码 public class AnimationChannelCollection ReadOnlyCollection
  • 使用Unity使用什么语言进行开发

    使用 Unity 进行编程时需要使用什么语言 或者它是多种语言的API 我通读了文档 我想我错过了所使用的语言的要点 它说它有 iOS 部署 这仍然允许程序员使用 Objective C 进行编码吗 Unity 是一个可用于多种平台的 sd
  • jQuery 插件与小部件

    几个月前 我开始使用 jQuery 插件进行一些实验 我在互联网上找到了一些教程 然后开始整理一些东西 几天前 我需要构建自己的 插件 并回到我的旧项目 当我试图在互联网上找到更多信息时 我偶然发现了这些称为小部件的新 东西 据我了解 我应
  • 如何在选中单元格后停止 DataGridView 编辑?

    I use ContexMenuStrip on DataGridView删除一些行 但它无法正常工作 每次如果我检查 3 行 选择后ContexMenuStrip它只删除 2 行 当我在没有的情况下执行此代码时ContexMenuStri
  • 编写一个加载 msvcr80.dll 并公开 free() 函数的 DLL

    我有一个依赖于 MSVCR80 的第三方 DLL 并分配我需要清理的资源 图书馆有not暴露一个free 执行此操作的函数 相反 我需要加载相同的运行时库并手动调用free功能 作为一种解决方法 我尝试编写一个 包装器 DLL 它加载正确的
  • 导航到特定的数据透视项

    当我点击主页上的图像时 如何导航到数据透视表的特定数据透视项 主页上的图像的 XAML 代码如下
  • UISearchBar 取消按钮没有响应

    我已经实现了搜索栏 一旦用户将焦点放在搜索栏中 它就会显示取消按钮 为此我写了searchBar showsCancelButton YES in my searchBarTextDidBeginEditing方法 在searchBarSe
  • 不允许从此上下文调用 Browser.inputBox()

    在我第一次使用 Google 脚本时 我尝试定义一个调用 Browser input 方法来获取用户名的函数 但我总是收到以下错误消息 不允许从此上下文中调用 Browser inputBox 我必须说 我是从葡萄牙语环境翻译的 因为英语中
  • 为什么签名的 Android apk 无法在模拟器上运行

    我已经制作了一个android项目的签名apk 每当我的客户尝试在模拟器上运行它时 他都会遇到以下错误消息 D Android android sdk windows tools gt adb install r abc apk 500 K
  • Draggable 正在阻止触摸事件

    我正在尝试使用拖动来来回移动 div 这部分工作正常 直到 div 具有可滚动内容 由于滚动条 这在桌面上不是问题 但在触摸设备上会出现问题 由于触摸事件与拖动事件冲突 我无法滚动内容 我尝试创建一个条件来检测拖动是否水平方向多于垂直方向
  • 将 NSString 分离成 N​​SArray,但允许用引号对单词进行分组

    我有一个搜索字符串 人们可以使用引号将短语组合在一起 并将其与单个关键字混合 例如 像这样的字符串 Something amazing rooster 我想把它分成一个 NSArray 这样它就有Something amazing 不带引号
  • 的 CSS margin-top 影响父级的边距

    我已经研究这个问题有一段时间了 但还没有找到直接的答案 当向元素添加页边距顶部时 就我而言 它主要发生在标题上 在许多情况下 边距顶部是与父级共享的 HTML div h1 My title h1 div CSS div padding 2

  • 传递多个参数或对象(单击)

    问题是将对象或多个参数从模板传递到组件 并使用它们将数据添加到 API 任务 service ts addTasks task Task Observable
  • ESLint Airbnb ES6 和 Redux 异步操作围绕箭头主体的意外块语句

    我究竟做错了什么 我有其他三个异步操作也有同样的问题并且无法修复它 当你看一眼箭头函数文档 https developer mozilla org en docs Web JavaScript Reference Functions Arr
  • 大小 8 2 的读/写无效

    在处理我的学校项目时 在 Unix 学校服务器上编译我的项目后 我不断收到来自 Valgrind 的以下错误 并且无法运行该程序 因为我收到 分段错误 11 95183 Memcheck a memory error detector 95
  • Laravel 保存文件将其发布为 bin 文件

    我试图在 laravel 中保存文件 但它最终被保存为 bin 文件 file request gt file file name Carbon now gt format Y m d strtotime Carbon now file g
  • c# WebClient DownloadProgresschanged TotalBytesToReceive = -1

    我浏览了一下网络 没有看到其他人遇到这个问题 我正在使用使用 DownloadFileAsync 的 Web 客户端 当事件处理程序 DownloadProgressChanged 被调用时 TotalBytesToReceive 来自 D
  • 在 Vega Lite 中使用二维数组数据代替表格

    我正在尝试从普罗米修斯读取数据 https prometheus io https prometheus io 进入 Vega Lite Prometheus 以二维数组返回其数据 如下所示 1 10 3 6 5 0 9 4 11 2 是否
  • 在 C++ 中声明长文字时是否需要长后缀和无符号后缀?

    我对编写 C 代码有一些古老的记忆 例如 long value 0 在过去糟糕的 Win16 日子里 最终以value仅半初始化 即低 16 位是0高 16 位是内存中该位置的任意随机位 于是 我就习惯性地写下了 long value 0L
  • “Inverse SFINAE”以避免不明确的过载

    如果第二个模板实例化 如何防止下面的第一个模板实例化 即如果两者static cast