我有一段时间以来一直有这个问题。假设我们有一个人为的功能:
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);
}
我不确定的是我是否应该int
或const 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&&
或???
吗?
答案 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
}