SFINAE 无法有条件地编译成员函数模板

2024-05-26

我正在尝试你使用std::enable_if使用 SFINAE 和以下代码有条件地仅选择两个成员函数模板中的一个:

#include <iostream>
#include <type_traits>

template<typename T>
struct C {
    template<typename Q = T, typename = typename std::enable_if<std::is_same<Q, int>::value>::type>
    int foo() {
        return 1;
    }

    template<typename Q = T, typename = typename std::enable_if<!std::is_same<Q, int>::value>::type>
    int foo() {
        return 0;
    }

};

int main() {
    std::cout << C<int>().foo() << std::endl;  //error member function foo already defined
}

但由于某种原因,Visual C++ 不断给我一个编译器错误foo已经定义了。尽管如此,很明显,根据类的模板参数,只有一个函数是格式良好的。因此,SFINAE 应将第二个排除在考虑范围之外。

知道为什么这不起作用吗?


Try with

template<typename T>
struct C {
    template<typename Q = T,
             typename std::enable_if<std::is_same<Q, int>::value, bool>::type = true>
    int foo() { // .............................................^^^^^^^^^^^^^^^^^^^^
        return 1;
    }

    template<typename Q = T, 
             typename std::enable_if<!std::is_same<Q, int>::value, bool>::type = true>
    int foo() { // ..............................................^^^^^^^^^^^^^^^^^^^^
        return 0;
    }

};

重点是,在您的代码中,SFINAE 将启用/禁用模板类型参数的默认值;但默认值不参与重载决策,因此,在您的情况下,您有两个函数

template<typename, typename = void>
int foo() {
    return 1;
}

template<typename, typename>
int foo() {
    return 0;
}

具有相同的签名;所以编译器无法在两者之间进行选择,并且会给出错误。

我提出的代码是不同的,因为万一测试std::enable_if为 false,您没有类型(左侧的元素=),而不是值。诸如此类的东西

// ................VVVVVV   what is = true ?
template<typename, = true>
int foo() {
    return 1;
}

这是真正的“替换失败”,会禁用该方法。

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

SFINAE 无法有条件地编译成员函数模板 的相关文章

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

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

    我已经实现了template
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 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
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • 如何在状态栏显示通知?

    所以我在我的活动中创建了此通知 Notification n new Notification Builder getApplicationContext setContentTitle New mail from sender setCo
  • 对 FileList 对象进行排序

    我正在尝试使用新的文件 API 对输入文件进行排序 它返回的列表似乎是不可变的 var x var files e target files FileList object Loop through the FileList and ren
  • 在 Facebook 上分享时如何更改 Play 商店应用程序的预览?

    我已在 Google Play 开发者控制台中更改了游戏的图标和屏幕截图 并且它在 Play 商店中正确显示 但当我尝试在 Facebook 上分享 Play 商店链接时 预览会带有旧图标和屏幕截图 如何将此预览更新到应用程序的最新版本 你
  • GIT:无效路径“.editorconfig”

    从 master 克隆项目时出现以下错误 错误 无效路径 editorconfig 致命 无法签出工作树 警告 克隆成功 但结账失败 您可以使用 git status 检查签出的内容 并使用 git Restore source HEAD
  • 如何使 Javascript focus() 方法在输入文本框的 onBlur 事件中工作?

    对于我来说focus 如果我将它与按钮和 onClick 事件一起使用 则该方法工作正常 但使用onBlur从文本框中 它不起作用 有人可以指导我吗
  • Yii2 - 检查用户是否登录视图

    我试图检查用户是否登录到我的视图文件中 但我不断收到此错误 Call to undefined method Yii app 我尝试添加 before app但错误仍然存 在 这次是未定义的变量 应用程序 这可能是观点吗 这是我用来检查用户
  • Angular4 Material md-table 列宽度像普通表一样自动调整大小

    我在 Angular 4 应用程序中使用 md table 因为我将 Material 用于 UI 格式的其他部分 当我使用基本上没有 CSS 的常规表格时 列会自动设置格式以适合最宽的 td 元素 使用 md table 除了太宽的单元格
  • 最佳实践:在 PHP 中导入 mySQL 文件;分割查询

    我遇到了一种情况 我必须更新共享托管提供商上的网站 该网站有一个 CMS 使用 FTP 上传 CMS 文件非常简单 我还必须导入一个大的 相对于 PHP 脚本的范围 数据库文件 未压缩时大约 2 3 MB Mysql 已关闭 无法从外部访问
  • 如何使用 AWS SAM 为 HttpApi 配置自定义域?

    我正在使用 AWS Lambda AWS API Gateway 和 aws sam 开发 API 我已经实现了 firebase 身份验证 我也使用嵌套堆栈 我正在尝试为我的 API 端点使用自定义域 因此我可以像这样调用api mydo
  • 如何使用 HBASE Shell 创建具有预分割和压缩或其他选项的表

    在 HBase shell 中 帮助文件向我们展示了几种允许的创建表的语法 create tableName NAME gt colFamily VERSIONS gt 5 create tableName NAME gt cf1 NAME
  • flutter 聊天应用程序上的消息顺序不正确

    我刚刚根据教程完成了一个基本的聊天应用程序 新消息应该显示在底部 但这种情况没有发生 当我删除 保存并再次添加时reversed排队 final messages snapshot data documents reversed 然后它似乎
  • Web API 2 和 ASP Identity - 处理锁定的用户

    我刚刚将我的 Web 应用程序 ASP NET MVC 迁移到 ASP Identity 经过相当多的工作后 除了 Web 应用程序提供的 API 之外 一切都工作正常 这是一个 WEB API 2 它使用不记名令牌机制来验证用户身份 身份
  • 如何在 postgresql 中使用“时间”字段按小时分组?

    我有一张带有一列的桌子ctime类型的time without time zone cdate ctime 2016 12 24 12 02 17 2016 12 24 12 02 32 2016 12 24 12 03 00 2016 1
  • Bootstrap 3 将文本与 Div 底部对齐

    我正在尝试在 Bootstrap 中进行如下设置 其中文本与图像底部对齐 THIS IS AN IMAGE And some text
  • Boost Python:多态容器?

    我有一个方法 或函数 它返回对多态对象列表的引用 class A class B public A std list
  • 使用 MYSQL 创建随机数

    我想知道是否有一种方法可以选择 100 到 500 之间随机生成的数字以及选择查询 Eg SELECT name address random number FROM users 我不必将此数字存储在数据库中 而只需使用它来显示目的 我尝试
  • 更新图像而不闪烁 ASP.NET C#

    我正在编写一个网站 该网站的页面必须显示图像 该图像是由 HttpHandler 使用查询字符串命令创建的 如何才能使其正常工作而不会出现任何闪烁 提前致谢 如果您需要一些代码 我很乐意分享 您可以使用 2 个 UpdatePanel 并在
  • 反序列化之前从 JSON 中删除奇怪的隐藏字符

    我有一些 JSON 发送给我 当它尝试反序列化时会中断 它似乎含有一颗黑色钻石 上面有 在里面 我看不到该角色 但它显然在那里 但在我的系统上失败了 如何摆脱这个问题并保持 JSON 完整以进行反序列化 UPDATE 以下是 JSON 中间
  • 使用 Spring 与 RabbitMQ 集成

    我正在为我们的一个应用程序开发消息传递界面 该应用程序是一种服务 旨在接受 作业 进行一些处理并返回结果 实际上以文件的形式 这个想法是使用 RabbitMQ 作为消息传递基础设施 并使用 Spring AMQP 来处理协议特定的细节 我不
  • SFINAE 无法有条件地编译成员函数模板

    我正在尝试你使用std enable if使用 SFINAE 和以下代码有条件地仅选择两个成员函数模板中的一个 include