考虑以下代码:
template <class Function, class = typename std::enable_if</*SOMETHING*/>::type>
apply(Function&& f);
执行提供的功能。
要使用 SFINAE,我想检查函数是否满足以下条件:
- 它需要一个可转换为的参数
const unsigned int
- 它返回可转换为
std::string
我必须写什么而不是/*SOMETHING*/
?
考虑以下代码:
template <class Function, class = typename std::enable_if</*SOMETHING*/>::type>
apply(Function&& f);
执行提供的功能。
要使用 SFINAE,我想检查函数是否满足以下条件:
const unsigned int
std::string
我必须写什么而不是/*SOMETHING*/
?
您没有为 指定返回值apply
,我将选择int
:
#include <string>
#include <type_traits>
template <class Function,
class = typename std::enable_if<
std::is_convertible<
decltype(std::declval<Function>()(std::declval<const unsigned int>())),std::string>::value>::type>
int apply(Function&& f);
将其分解:这可确保 a Function
:
std::declval<Function>()
使用const unsigned int
参数调用:
std::declval<Function()(std::declval<const unsigned int>())
有一个返回类型:
decltype(std::declval<Function()(std::declval<const unsigned int>()))
可转换为std::string
:
std::is_convertible<decltype(std::declval<Function()(std::declval<const unsigned int>())), std::string>
哇。