请考虑以下代码:
template <class Function, class = typename std::enable_if</*SOMETHING*/>::type>
apply(Function&& f);
执行提供的功能。
要使用SFINAE,我想检查该功能是否满足以下条件:
const unsigned int
std::string
我需要写什么而不是/*SOMETHING*/
?
答案 0 :(得分:3)
您尚未指定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);
分解:确保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>
噢。