如何专门化枚举和特定类型的模板函数?

2023-12-01

我目前有一个功能:

template<typename T> 
bool func(T &t, int x)
{
    // do stuff...
}

但是我想要三个不同的函数体:

  1. T是一个enum
  2. T being unsigned char
  3. 其他一切

我努力了this已经但没有走远。

对于这三种情况,正确的函数声明是什么?


我能想到的最接近的是案例 1:

template<typename T>
typename std::enable_if< std::is_enum<T>::value, bool >::type func( T &t, int x)

案例 3 是:

template<typename T>
typename std::enable_if< not std::is_enum<T>::value, bool >::type func( T &t, int x)

但是我无法为案例 2 进行编译。作为解决方法,我有一个ifCase 3 中的语句来处理无符号字符,但这并不理想。


使用标签调度:

namespace details {
  template<class T>
  bool func( T& t, int x, std::true_type /* is_enum */, std::false_type ) {
  }
  template<class T>
  bool func( T& t, int x, std::false_type, std::true_type /* unsigned char */ ) {
  }
  template<class T>
  bool func( T& t, int x, std::false_type, std::false_type ) {
    // neither
  }
}
template<class T>
bool func( T& t, int x ) {
  return details::func( t, x, std::is_enum<T>{}, std::is_same<unsigned char, T>{} );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何专门化枚举和特定类型的模板函数? 的相关文章

  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 如何从 firebase 检索数据,其中日期值是当前日期 1 个月前的数据

    SimpleDateFormat sdf new SimpleDateFormat dd MM yyyy HH mm Calendar c Calendar getInstance String date sdf format c getT
  • Nodejs - 将输出流式传输到浏览器

    var http require http var sys require sys var filename process ARGV 2 var exec require child process exec var com exec u
  • servlet中filter和chain有什么用?

    chain doFilter req res 我们在 servlet 程序中使用了它 我想知道这个方法有什么用doFilter 在 servlet 中 另外 Java servlet 中的过滤器和链概念有什么用 Servlet 过滤器是责任
  • 带seaborn的条形图,按行着色

    我创建了一个组合条形图 无法按行着色 我尝试了色调 颜色 调色板 库的所有组合 但没有成功 我的代码是 fig axes plt subplots 1 5 figsize 11 8 my new color UA white AA blue
  • 尽管已安装,JavaFX PieChart 工具提示仍不显示

    我尝试为 PieChart 的每个 切片 显示一个工具提示 与 Chart js 中的类似 I found 这个答案基本上试图在相同的框架中实现相同的目标 它有两个赞成票 从其他 已接受的 答案来看 这似乎也适用于其他图表类型 然而 从没有
  • 如何从 Xcode 中的 uipicker 获取所选时区的日期和时间

    我正在尝试在标签或文本字段中显示 uipicker 中选定时区的日期和时间 但我没有任何方法来解决此问题 所以请任何人帮助我 提前致谢 SelectedTimeZone 权重objectAtIndex pickerView selected
  • 为所有视图提供额外的上下文

    我正在使用 django 为我的团队构建一个项目管理网站 我的基本模板包括一个侧边栏菜单 其中包含所有项目和用户的列表 链接到DetailView分别针对该用户或项目 我的问题是我需要提供User and Project模型到每个视图 以便
  • 子边距为父边距添加边距

    如果我有以下代码怎么办 HTML section class home section section class main h1 Hello h1 section CSS代码 html body height 100 width 100
  • Freemarker/Velocity - 日期操作

    我对这两个模板引擎有一个相当简单的问题 我正在尝试确定一个未来 过去的日期 从现在开始的固定时间 例如18个月前 或者明天 我知道可以使用velocity freemarker模板中的java日期对象来做到这一点 类似于 date add
  • 如何在 C# 中将 lambda 表达式作为参数传递

    我是使用 lambda 表达式的初学者 我有一个经销商名单 我必须为每个经销商计算等级 要求是将等级计算分成单独的方法 所以我正在编写以下两个方法 但是我无法将参数传递给CalculateGrade method public IEnume
  • 如何制作 Parse.Query.AND?

    我需要用 and 连接 Parse com 中的 2 个查询 我的代码是 var queryDeseo1 new Parse Query DeseosModel queryDeseo1 equalTo User Parse User cur
  • 使用“order”属性在同级之间定位弹性项目

    我有一个包含一到三个弹性项目的弹性盒 正确的布局应该是这样的 div div h2 h2 div div 在包含的弹性框中 我有代码可以完成这项工作 请参阅this 仅当布局顺序保持不变时 我的问题是 如何有办法确保 如果标记并不总是按该顺
  • 如何在RecyclerView和ViewPager上解决捕捉功能时获取即将选择的页面

    背景 ViewPager在执行一些滚动后捕捉到视图 因此可以RecyclerView 如果你使用这样的东西 LinearSnapHelper attachToRecyclerView recyclerView 或者通过使用库捕捉到某个边缘
  • 负载平衡、AJAX 和您

    如果您是 Asp Net MVC 环境中的异步 javascript 调用 并且必须使用循环方式的负载均衡器 您能找到回家的路吗 编辑 添加说明 使用内存中会话状态 我会使用粘性会话配置负载均衡器以避免此问题 通过粘性会话 您将在会话期间一
  • 首次加载时显示的 Azure AD B2C 自定义 UI 错误标签

    我有一个 Azure AD B2C 租户 我创建了一个 默认 SignUpAndSignInPolicy 并为登录页面 注册页面和重置密码页面添加了自定义 UI 模板 一切正常 除了在注册页面和重置密码页面上 表单输入字段在初始加载时始终标
  • 合并所有其他数组 php

    数组一 1 3 5 7数组二 2 4 6 8 我想要的数组是1 2 3 4 5 6 7 8 我只是用数字作为例子 如果只是数字 我可以合并和排序 但它们将是单词 所以也许像 数组一 bob a awesome 数组二 is really d
  • 从 .NET 连接到 LDAP 服务器

    我被推荐使用System DirectoryServices Protocols能够支持连接到 Active Directory 以外的 LDAP 服务器here 不幸的是 我无法正确搜索该目录 我希望能够获得用户的某个属性 例如mail
  • 如何以编程方式启用服务菜单,而无需用户注销,然后在键盘首选项中启用它?

    正如标题所言 请大家帮忙 您需要在每个服务的字典中包含 NSRequiredContext 键 文档没有提到这一点 但从 Mac OS X 10 6 开始是必需的 如您所见 如果您没有服务 默认情况下您的服务将被禁用 您还应该致电the N
  • 实体框架。需要帮助过滤结果

    需要在实体框架中选择数据 但需要对子孙进行过滤 我有4张桌子 Parent gt Child gt GrandChild gt GreatGrandChild我想返回所有的父母 但过滤掉孩子和曾孙 换句话说 例如 SELECT Parent
  • 如何专门化枚举和特定类型的模板函数?

    我目前有一个功能 template