默认参数的功能特征

依来马吉尔

在这个问题中Is it possible to figure out the parameter type and return type of a lambda?function_traits显示/链接了一个不错的struct实现

这种特征结构可以确定

  • 返回类型
  • 函数调用类型(即R(Ts ...)
  • 功能联盟
  • 每个参数的参数类型

但是,它不能与默认参数一起正常工作。也就是说,只有完整类型(包括所有默认参数)才被视为函数的类型。

是否可以编写afunction_trait来检查给定的功能参数是否为默认参数?


具体来说,我想在以后使用SFINAE来使用此特征,以基于传递给函数的函数的最小/最大适应性以及传递给函数的参数包的大小来启用/禁用给定的实现。

template <typename Func, typename ... Ts>
std::enable_if<(function_trait<decltype(F)>::min_arity >= sizeof ... ( Ts ) 
                and 
                function_trait<decltype(F)>::max_arity <= sizeof ... ( Ts ) )>::type
foo( Func F, Ts ... ts ){
    F( ts ... );
}

显然,这个例子有些人为的。

Angew不再为SO感到骄傲

您不能仅使用可用的函数类型来执行此操作,因为默认参数不是函数类型的一部分。以下内容成立

void foo(int, int);
void bar(int, int = 42);

static_assert(std::is_same<decltype(foo), decltype(bar)>::value, "He's wrong!");

这意味着您无法确定是否Func可以使用少于其数量的一定数量的参数来调用类型的函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

默认参数的功能特征

来自分类Dev

默认功能参数

来自分类Dev

模板功能默认参数

来自分类Dev

特征矩阵作为函数的默认参数

来自分类Dev

附加到功能的默认参数

来自分类Dev

功能模板:默认类型参数

来自分类Dev

附加到功能的默认参数

来自分类Dev

模板功能的默认值,功能参数

来自分类Dev

检查功能的特征接受某些参数,但不返回类型

来自分类Dev

在本机上使用默认功能参数

来自分类Dev

Scala主要功能的默认参数?

来自分类Dev

使用默认参数解析虚拟功能

来自分类Dev

具体功能作为默认模板参数

来自分类Dev

功能上的默认解构参数

来自分类Dev

Scala主要功能的默认参数?

来自分类Dev

在本机上使用默认功能参数

来自分类Dev

如何模拟要测试的功能使用的功能的默认参数?

来自分类Dev

Scala功能界面特征

来自分类Dev

成员功能特征

来自分类Dev

如何知道是否传递了可选功能参数或使用默认功能参数?

来自分类Dev

Babel 6-启用功能的默认参数

来自分类Dev

在R中设置功能参数的默认值

来自分类Dev

在Scala中设置功能参数的默认值

来自分类Dev

在参数默认值中使用查找功能

来自分类Dev

可选功能参数,默认值为参考值

来自分类Dev

具有默认模板参数的朋友功能模板

来自分类Dev

更改包中所有功能的通用默认参数

来自分类Dev

模板功能中的默认参数值,取决于类型

来自分类Dev

元组作为功能参数中的默认值