std :: result_of参数类型

时间:2016-06-20 02:02:23

标签: c++ c++11 c++14

我有一段时间以来一直有这个问题。假设我们有一个人为的功能:

template<typename F>
std::result_of_t<std::decay_t<F>(???)> transform(F&& f)
{
    static const int num = 42;
    return std::forward<F>(f)(num);
}

我不确定的是我是否应该intconst int&使用???部分。同样,对于这个功能:

template<typename F>
std::result_of_t<std::decay_t<F>(???)> transform(F&& f)
{
    ExpensiveType foo;
    return std::forward<F>(f)(std::move(foo));
}

我应该对ExpensiveType部分使用ExpensiveType&&???吗?

1 个答案:

答案 0 :(得分:2)

使用自动!

C ++ 14:

template < typename F >
auto transform(F&& f)
{
    constexpr auto num = 42;
    return std::forward<F>(f)(num);
}

C ++ 11:

template < typename F >
auto transform(F&& f) -> decltype(std::forward<F>(f)(42))
{
    // ... same body
}