SFINAE:static_assert 与 std::enable_if

2024-01-01

是否存在以下缺点(建议!) 句法?

template< typename T >
void f() static_assert(std::is_same< T, int >::value)
{ ; }

而不是 SFINAE(看起来像拐杖):

template< typename T, typename = typename std::enable_if< std::is_same< T, int >::value >::type >
void f() { ; }

甚至更糟:

template< typename T >
typename std::enable_if< std::is_same< T, int >::value >::type 
f() 
{ ; }

其中禁止使用auto结果类型的推导。


首先,它们是不同的,特别是它们不是同时检查的。

关键的区别在于它们在重载解析方面的应用。 SFINAE 将从重载集中剔除函数,以便选择另一个函数(如果有),而static_assert被申请;被应用after重载解析,因此将给出error这将停止编译。

现在,关于您的投诉,您可以完美使用auto和 SFINAE:

// Ensure that T is int
template <typename T>
auto f() -> typename std::enable_if< std::is_same< T, int >::value >::type
{ ... }

// Only pick this overload if begin(c) and end(c) are available
template <typename T>
auto f(T const& c) -> decltype(begin(c), end(c), bool{}) { ... }

...并且您可以完美使用 SFINAE 和自动类型推导

template <typename T,
          typename = typename std::enable_if<std::is_same<T, int>::value>::type>
auto f() { ... }

template <typename T>
auto f(void* =
       typename std::enable_if<std::is_same<T, int>::value>::type*(0))
{ ... }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SFINAE:static_assert 与 std::enable_if 的相关文章

  • 是否有与 posix_memalign 对应的 C++ 版本?

    当我打电话时posix memalign http man7 org linux man pages man3 posix memalign 3 html为类型的对象分配对齐的内存Foo在我的 C 代码中 我需要做一个reinterpret
  • 如何从 C# 中的 dataTable.Select( ) 查询中删除单引号?

    所以我有一个经销商名称列表 我正在我的数据表中搜索它们 问题是 一些傻瓜必须被命名为 Young s 这会导致错误 drs dtDealers Select DealerName dealerName 所以我尝试替换字符串 尽管它对我不起作
  • 适合初学者的良好调试器教程[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有谁知道一个好的初学者教程 在 C 中使用调试器 我感觉自己好像错过了很多 我知道怎么做 单步执行代码并查看局部变量 虽然这常常给我带来问
  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

    我现在已经尝试了很多事情并得出了一些结论 也许 我监督了一些事情 但似乎我无法完成我想要的事情 问题是 是否有可能使用 OpenMP 和 boost 在 MacOS High Sierra 上编译 C 一些发现 如果我错了请纠正我 Open
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 如何使用 Castle Windsor 将对象注入到 WCF IErrorHandler 实现中?

    我正在使用 WCF 开发一组服务 该应用程序正在使用 Castle Windsor 进行依赖注入 我添加了一个IErrorHandler通过属性添加到服务的实现 到目前为止一切正常 这IErrorHandler对象 一个名为FaultHan
  • 为什么在 WebApi 上下文中在 using 块中使用 HttpClient 是错误的?

    那么 问题是为什么在 using 块中使用 HttpClient 是错误的 但在 WebApi 上下文中呢 我一直在读这篇文章不要阻止异步代码 https blog stephencleary com 2012 07 dont block
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone
  • 不区分大小写的字符串比较 C++ [重复]

    这个问题在这里已经有答案了 我知道有一些方法可以进行忽略大小写的比较 其中涉及遍历字符串或一个good one https stackoverflow com questions 11635 case insensitive string

随机推荐

  • 如何使用 apache 在 OVH 相互化服务器上​​禁用 X-Powered-By?

    我尝试禁用两者X Powered By and Server出于安全考虑 将以下内容添加到 OVH 交互服务器中的我的 htaccess 中
  • Xamarin Forms 和 EntityFramework 属性兼容性

    我有一个客户端 服务器解决方案 using C WPF ASP NET WebAPI and Entity Framework 客户端和服务器类分享模型在他的项目中 现在我正在尝试使用 Xamarin Forms 创建一个新客户端并将模型共
  • 无法运行 import tensorflow as tf

    我使用以下命令安装了tensorflow pip install tensorflow 我正在运行一个简单的程序 import tensorflow as tf node1 tf constant 3 0 tf float32 node2
  • 我可以重载 Groovy 中的隐式类型转换吗?

    说我有一个函数 def method1 MyClass2 mc2 我用一个类型的对象来调用它MyClass1 有没有一种方法可以指定如何隐式转换MyClass1 to MyClass2 这样方法调用就可以工作 而不必明确地说method1
  • 通过 LDAP 对当前 Windows 用户的凭据进行身份验证?

    我们有一个使用 WAMP W 代表 Windows P 代表 PHP 的 Windows 桌面内联网上托管的应用程序 我们需要实现一项新功能 每当用户访问我们的 Intranet 站点时 通过使用他 她的 Windows 登录凭据来验证用户
  • 使用表类将类添加到 codeigniter 中的特定行

    如何使用表类将类添加到 codeigniter 中的特定行 您不能像向 CI 样式的其他元素添加额外属性那样向行添加类 但是 您可以连续向每个 td 添加一个类 然后在该类引用整行时对该类进行操作 td1 array data gt act
  • 使用 selenium 和 python 进行网页抓取 - 包含文本的 xpath

    我会尽力让它变得很短 我正在尝试单击通过网站搜索得出的产品 基本上有一个匹配产品的列表 我想单击第一个包含我在标题中搜索的产品名称的产品 我将发布该网站的链接 以便您可以检查其 DOM 结构 在这种情况下 许多都包含我的查询字符串 我只想单
  • toString() 是否定义为返回 java.lang.String ?

    Consider String foo s toString 对于一个非null java lang String实例s 这是定义为返回自身 还是取决于特定的 Java 实现 出于兴趣 是否进行了 深层复制 检查我的 JDK 源代码证实了这
  • 计算图像中某个区域的平均颜色

    目标是在图像顶部放置标题 并将文本颜色设置为与其所在背景形成对比的颜色 为此 我希望计算下图中红色矩形内区域的平均颜色 扩展于邦佐的回答 a 10831158 这是一个示例命令 convert Y82IirS jpg resize 1x1
  • Android 自定义 ActionBar 与搜索视图

    我在我的 Android 应用程序中使用自定义 ActionBar 库 我想显示一个 searchView 但找不到任何解决方案 我正在图书馆工作 https github com johannilsson android actionba
  • IDisposable 对象的依赖注入和生命周期

    我正在尝试使用依赖注入方法 使用 Ninject 开发一个库 并且我可能由于我的设计不正确而感到某种困惑 综上所述 我的设计思路是 A parent对象有一个common object A parent对象使用一些可变数量的child对象
  • 框架比较和开销

    我正在开发一款使用 Zend 框架开发的 Facebook 游戏 现在我没有太多的流量 并且已经看到相当多的数据使用 CPU 时间 其实我不太擅长Zend 我擅长从头开始编写 PHP 和 JS 代码 所以 我很好奇Zend框架的性能 因为我
  • 如何使用 linq toEntity 读取 UTF 8 编码的字符串

    我正在尝试阅读石灰调查 http www limesurvey org 使用 Linq to 实体的表 我的问题是 LimeSurvey 以 UTF8 存储字符串 而 Net 不喜欢它 那么 我有一个简单的函数来列出我的所有调查 我如何告诉
  • Matlab中如何获取直方图数据

    众所周知 Matlab 中的 hist 函数绘制数组的直方图 我需要知道每个垃圾箱的数值 请问你能帮帮我吗 thanks 指定输出hist http www mathworks com access helpdesk help techdo
  • 如何通过flask.Blueprint.route装饰器传递类的自身?

    我正在使用 Flask 和 Python 2 7 编写网站的后端 但遇到了一些问题 我喜欢使用类来封装我的函数 它使我的事情变得整洁并帮助我保持一切模块化 不过 我遇到的一个问题是 flask 用于路由的装饰器不保留 self 变量 我使用
  • 普通 JavaScript 中的 jqueryposition()

    我有以下代码行 var newLeftPos span s i position left parseInt span s i css width 10 它在 ie6 及更高版本中工作得很好 但我还需要让它在 ie5 5 中工作 现在我们不
  • 使用 Redux 获取 Widget 树外部的更新状态

    是否可以从 Widget 树之外的 Store 获取最新状态 在 Provider 中 您可以通过像这样调用 Provider 轻松做到这一点 并且如果有任何更改 状态将更新 Provider of
  • 为什么 MSBuild 将 *.XmlSerializers.dll 程序集放在已发布的 Web 应用程序的根文件夹中?

    我有一个构建过程 它采用我的 VS 2008 NET 2 0 ASP NET 项目并使用 MSBuild 构建它 该项目包含 ASPX 文件和一个 Web 服务 并且还连接到另一个 Web 服务 一切似乎都运行良好 除了 MSBuild 将
  • c# xml序列化不写null

    当我序列化一个包含可为 null DateTime 的 C 对象时 有没有办法将 null 值保留在 xml 文件之外 而不是让
  • SFINAE:static_assert 与 std::enable_if

    是否存在以下缺点 建议 句法 template lt typename T gt void f static assert std is same lt T int gt value 而不是 SFINAE 看起来像拐杖 template l