Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 是否启用以检查传递的类型是否为兼容函数?_Templates_C++11_Template Meta Programming_Typetraits_Enable If - Fatal编程技术网

Templates 是否启用以检查传递的类型是否为兼容函数?

Templates 是否启用以检查传递的类型是否为兼容函数?,templates,c++11,template-meta-programming,typetraits,enable-if,Templates,C++11,Template Meta Programming,Typetraits,Enable If,考虑以下代码: template <class Function, class = typename std::enable_if</*SOMETHING*/>::type> apply(Function&& f); 它执行提供的函数 要使用SFINAE,我想检查函数是否满足以下条件: 它需要一个可转换为常量unsigned int的参数 它返回可转换为std::string的内容 我必须写什么来代替/*SOMETHING*/?如果没有为apply指定返

考虑以下代码:

template <class Function, class = typename std::enable_if</*SOMETHING*/>::type>
apply(Function&& f);
它执行提供的函数

要使用SFINAE,我想检查函数是否满足以下条件:

它需要一个可转换为常量unsigned int的参数 它返回可转换为std::string的内容
我必须写什么来代替/*SOMETHING*/?

如果没有为apply指定返回值,我将选择int:

使用常量unsigned int参数调用:

std::declval<Function()(std::declval<const unsigned int>())

std::declval<Function>()
std::declval<Function()(std::declval<const unsigned int>())
decltype(std::declval<Function()(std::declval<const unsigned int>()))
std::is_convertible<decltype(std::declval<Function()(std::declval<const unsigned int>())), std::string>