SFINAE 有符号和无符号的区别

2023-11-22

我有将不同算术类型转换为半精度浮点类型的函数(只是一个uint16_t在最低级别),我对整数和浮点源类型有不同的函数,使用 SFINAE 和std::enable_if:

template<typename T>
uint16_t to_half(typename std::enable_if<
                 std::is_floating_point<T>::value,T>::type value)
{
    //float to half conversion
}

template<typename T>
uint16_t to_half(typename std::enable_if<
                 std::is_integral<T>::value,T>::type value)
{
    //int to half conversion
}

这些是通过显式实例化从通用模板化构造函数内部调用的:

template<typename T>
half::half(T rhs)
    : data_(detail::conversion::to_half<T>(rhs))
{
}

这可以编译并且工作得很好。现在我尝试通过用两个函数替换第二个函数来区分有符号整数和无符号整数:

template<typename T>
uint16_t to_half(typename std::enable_if<std::is_integral<T>::value &&
                 std::is_signed<T>::value,T>::type value)
{
    //signed to half conversion
}

template<typename T>
uint16_t to_half(typename std::enable_if<std::is_integral<T>::value &&
                 std::is_unsigned<T>::value,T>::type value)
{
    //unsigned to half conversion
}

但是一旦我尝试编译这个 VS2010 给了我

错误 C2995:"uint16_t math::detail::conversion::to_half( std::enable_if<std::tr1::is_integral<_Ty>::value && std::tr1::is_signed<_Ty>::value, T>::type )": 函数模板已经定义。

因此,它似乎无法消除两个模板之间的歧义,但显然积分版本和浮点版本没有问题。

但由于我不是一个模板魔术师,我可能只是在这里遗漏了一些明显的东西(或者也许它实际上应该工作并且只是 VS2010 的一个错误)。那么,为什么这不起作用?如何才能以尽可能少的编程开销并在仅限标准功能的限制内(如果可能的话)工作?


就我个人而言,我会尽可能避免在这里使用 SFINAE,因为你可以通过重载来完成同样的事情:

template<typename T>
uint16_t to_half_impl(T val, std::true_type, std::true_type)
{
    // is_integral + is_signed implementation
}

template<typename T>
uint16_t to_half_impl(T val, std::true_type, std::false_type)
{
    // is_integral + is_unsigned implementation
}

template<typename T>
uint16_t to_half_impl(T val, std::false_type, std::true_type)
{
    // is_floating_point implementation
}

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

SFINAE 有符号和无符号的区别 的相关文章

  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 当我们想要返回对象的引用时,为什么我们在赋值运算符中返回 *this 而通常(而不是 this)?

    我正在学习 C 和指针 我以为我理解了指针 直到我看到这个 一方面 asterix 运算符是解引用的 这意味着它返回值所指向的地址中的值 而与号 运算符则相反 它返回值存储的地址记忆 现在阅读有关赋值重载的内 容 它说 我们返回 this因
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 具有交替类型的可变参数模板参数包

    我想知道是否可以使用参数包捕获交替参数模式 例如 template
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • 使用 C# 读取 Soap 消息

  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • 将程序集安装到 GAC 中

    我尝试使用以下命令在 GAC 中安装程序集new System EnterpriseServices Internal Publish GACInstall Foo dll 但我找不到安装在 c windows assembly gac m
  • 使用我的 Android 应用程序将文本标签发送到 Instagram

    我的应用程序拍摄照片并将其发送到 Instagram Facebook 和 Twitter 但我需要在 Instagram 上分享带有图片的文本 myappname 这是我用来发送照片的代码 Intent shareIntent new I
  • 渲染 @object 和 locals 与 render :partial

    我想传递一个局部变量 其中包含特定页面上的原点 该变量仅包含带有值的符号 当我使用这段代码时 它工作得很好 可以在部分中访问 origin 变量 render partial gt products collection gt produc
  • 如何在 Node 4.x 中使用 Promise?

    既然 ES6 在 Node 4 x 中正式成为标准 那么如何使用 Promises 呢 做模块 例如本机fs模块 自动与 Promise 一起工作 或者必须专门编写模块才能与 Promise 一起使用 你怎么知道 Promise 可以用于什
  • 三种颜色的三角形

    我正在尝试为这个问题编写代码 来源 https www codewars com kata insane coloured triangles train c 彩色三角形是由一行颜色创建的 每种颜色都是 红色 绿色或蓝色 连续行 每行少一种
  • C++11:std::locale::empty() 是一件事吗?

    尝试编译一些代码来自 StackOverflow 基本上是这些行 std wifstream wif filename wif imbue std locale std locale empty new std codecvt utf8
  • 为什么我不能在单个服务器请求中插入带有外键的记录?

    我正在尝试使用外键进行简单的插入 但似乎我需要使用db SaveChanges 对于每条记录插入 我怎样才能只使用一个db SaveChanges 在这个程序的最后 public static void Test using var ent
  • 多次导航至同一实体

    当有 2 个导航时 我遇到两个实体之间的连接问题 具体来说 我有以下课程 public class TableA public TableA ListBs new List
  • Zend Framework 2:在视图中获取匹配的路由

    我目前正在通过开发一个大致基于骨架应用程序的小型 MVC 应用程序来学习 ZF2 现在我正在尝试根据匹配的路由隐藏一些固定的 HTML 元素 仅作为示例 我不希望在登录阶段显示主菜单 我可以通过将切换参数作为控制器操作的返回值传递来轻松做到
  • 如何在polymer中设置动态Meta标签和Open Graph标签?

    我有一个聚合物节点站点 我一直在研究它 但不知道如何包含动态元标记和开放图标记 Jquery 无法工作 也无法使用polymer api 添加节点 因为它会在页面加载后添加所有标签 而 facebook 将无法读取这些标签 谷歌爬虫确实会渲
  • 如何在 Pygame 中根据角度移动精灵

    我在移动精灵时遇到问题 我可以毫无问题地在 x 轴和 y 轴上移动它们 我不知道如何才能按照某个角度移动它们 我的意思是 我正在尝试创建一个函数 其中包括我尝试移动的对象 其速度和方向 应以度为单位测量 就像是 MovingObject o
  • 在使用 Ant 编译的文件中找不到主类

    我在 Eclipse 中编译并运行我的程序 一切正常 但是当我用 Ant 打包它并运行它时 出现以下错误 Exception in thread main java lang NoClassDefFoundError org supercs
  • VS 2010 鼠标处理器扩展 - 不工作

    我正在尝试 Visual Studio 2010 扩展 其中我需要处理 IMouseProcessor 公开的事件 据我从文档中可以看出 我应该创建一个 IMouseProcessorProvider 并使用 MEF 导出 以便 Visua
  • 在 .NET 中比较 2 个 XML 文档的最佳方法[重复]

    这个问题在这里已经有答案了 我有一堆单元测试需要检查 XML 输出 我已经开始比较字符串 但是由于格式和表面差异的阻碍 这不会扩展 NET 中评估生成的 XML 在语义上是否与测试期望的相同的最简单方法是什么 Closed作为重复您将如何比
  • SQL“IN”语句的 Linq 版本

    我有以下 3 个表作为简单 项目标记 模式的一部分 物品 项目 ID 整数 品牌varchar 名称 varchar 价格钱 条件varchar 说明 varchar 有效位 Tags 标签 ID 整数 名称 varchar 有效位 标签映
  • 根据数据设置 Dojox 网格行的样式

    我正在尝试根据网格中的值在 DojoX 1 2 3 网格内设置行的样式 网格布局 var view1 noscroll true rows field TASK ID name ID width 80px get this getColor
  • SQL Server 性能 结果集 vs 输出参数 vs 返回值

    我正在权衡使用三种不同方法之一将单个标量值从存储过程返回到我的 C 例程的潜在性能影响 谁能告诉我其中哪个 更快 最重要的是 为什么 方法一 CREATE PROCEDURE GetClientId DealerCode varchar 1
  • 一次运行多个 exec 命令(但要等待最后一个命令完成)

    我环顾四周 似乎找不到任何人正在尝试做我想做的事情 我有通过 POST 请求传递到我的函数的信息 根据该数据 我运行 exec 命令来运行 TCL 脚本一定次数 使用不同的参数 基于 post 变量 现在 我在 foreach 中有 exe
  • 4 点变换图像

    我需要转换位图图像 并将其 4 个角点从一个位置移动到另一个位置 任何可以在 Windows 上运行的代码 最好是 C VB NET 甚至可以帮助如何使用可编写脚本的程序 例如画图网 or Photoshop会被接受 Java 高级成像 A
  • SFINAE 有符号和无符号的区别

    我有将不同算术类型转换为半精度浮点类型的函数 只是一个uint16 t在最低级别 我对整数和浮点源类型有不同的函数 使用 SFINAE 和std enable if template