1

考虑以下代码:

template <class Function, class = typename std::enable_if</*SOMETHING*/>::type>
apply(Function&& f);

执行提供的功能。

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

  • 它需要一个可转换为的参数const unsigned int
  • 它返回可转换为std::string

我必须写什么而不是/*SOMETHING*/

4

1 回答 1

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);

将其分解:这可确保 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>

哇。

于 2013-06-24T06:51:29.770 回答