调用表达式中可调用参数的完美转发的目的?
Posted
技术标签:
【中文标题】调用表达式中可调用参数的完美转发的目的?【英文标题】:Purpose of perfect forwarding for Callable argument in invocation expression? 【发布时间】:2016-08-23 13:28:01 【问题描述】:在 Scott Meyer 的书 Effective Modern C++ on page 167(印刷版)中,他给出了以下示例:
auto timeFuncInvocation = [](auto&& func, auto&&... params)
// start timer;
std::forward<decltype(func)>(func)(
std::forward<decltype(params)>(params)...
);
// stop timer and record elapsed time;
;
我完全理解params
的完美转发,但我不清楚func
的完美转发何时相关。换句话说,与以下相比,上面的优点是什么:
auto timeFuncInvocation = [](auto&& func, auto&&... params)
// start timer;
func(
std::forward<decltype(params)>(params)...
);
// stop timer and record elapsed time;
;
【问题讨论】:
当func
有一个 ref 限定的函数调用操作符。
Ohhhhhh.... 非常有道理。
【参考方案1】:
出于与参数相同的目的:所以当 Func::operator()
是 ref 限定符时:
struct Functor
void operator ()() const & std::cout << "lvalue functor\n";
void operator ()() const && std::cout << "rvalue functor\n";
;
Demo
【讨论】:
去掉const
部分,那么它更好有意义。
不,因为const
右值引用更喜欢const &
重载而不是&&
重载:const Functor f() return Functor; ; f()();
example以上是关于调用表达式中可调用参数的完美转发的目的?的主要内容,如果未能解决你的问题,请参考以下文章