当前位置: 首页 > 知识库问答 >
问题:

类别的目的=C中的无效?[副本]

慎芷阳
2023-03-14

下面的代码片段中的class=val的目的是什么?

template< class, class = void >
struct has_type_member : false_type { };

template< class T >
struct has_type_member<T, void_t<typename T::type>> : true_type { };

共有1个答案

洪旻
2023-03-14
template< class, class = void >
struct has_type_member : false_type { };

这是您的默认结构模板,它要求两个模板参数,但第二个参数设置为默认值void,因此此参数不需要显式指定,有点像默认函数参数。

然后:

template< class T >
struct has_type_member<T, void_t<typename T::type>> : true_type { };

是您的has_type_member结构的模板特殊化,SFINAE将排除此特殊化,如果T::type不存在(因此,是无效的语法),如果它存在,它将以其他方式选择此特殊化。

第二个参数是模板专门化所必需的,但我们在“fallback”struct中不使用它,所以我们只是默认为void

 类似资料:
  • 我正在阅读有关C++11新特性的维基百科页面,但不理解有关类型别名的这一部分:https://en.wikipedia.org/wiki/c%2b%2b11#template_aliases using语法也可以用作C++11中的类型别名: typedef void(*FunctionType)(double);//旧样式 使用FunctionType=void(*)(double);//新引入的

  • 背景: 我有C背景,刚开始在嵌入式项目中使用C++。 我编写了一个能够处理多个设备的固件,具体取决于最终用户获得设备之前如何通过图形界面配置固件。 每个设备类型由一个类表示。 许多参数在多个(但不是所有)类型的器件之间共享(即电池电平),一些功能也共享(即从EEPROM读取特定于器件类型的内容)。 目标: 能够通过指针访问函数和变量,而不必不断转换void指针。 在调用函数之前,我不应该知道我使用

  • 我正在使用产品的ms-sql db构建一个 asp.net 网站 - 每个产品属于一个或多个类别,每个类别可以属于一个或零个父类别。 用户应该能够选择零个或多个类别,但我想不出一种方法来只返回所选类别中的产品。 我有其他正在工作的过滤器(最低价格,品牌名称等),但不能让类别工作。 例如: 如果选择了类别1,则应返回具有最终父类别为类别1的类别的所有产品。 如果选择了子类别1.1和子类别1.2,则所

  • 问题内容: 我正在使用返回JSON的API。 我有一个方法调用api,并解析所需节点的JSON响应。 到目前为止,除了最新的JSON响应似乎格式错误之外,其他所有功能都可以正常工作。 其他回复如下: 我使用JObject.Parse按名称带回适当的节点。 最新的JSON响应返回为: 如您所见,没有“名称”,并且JSON稍微无效。 我该如何解析。对于第一个示例,我使用下面的代码,但是现在JSON没有

  • 本文向大家介绍删除C ++中的无效括号,包括了删除C ++中的无效括号的使用技巧和注意事项,需要的朋友参考一下 假设我们有一串括号。我们必须删除最少数量的无效括号并返回格式正确的括号字符串,因此,如果输入类似于“()(()()”,那么结果将是[“()()()”,“( )(())”] 为了解决这个问题,我们将遵循以下步骤- 定义一个名为solve()的方法,它将接受pos、left、right、l、

  • 问题内容: 我们的构建服务器运行Jenkins 1.502,并将Subversion插件升级到1.45版。此插件使用。 另外,我们还安装了SVN客户端1.7.8。 Jenkins已成功从SVN信息库检出源代码。但是当我进入工作区目录并尝试手动运行一些svn命令时,它失败了: 错误消息表明工作副本是由SVN 1.4创建的,但是svnkit的版本是1.7.6。怎么会这样? 我搜索了整个文件系统,没有其