在调用表达式中完美转发Callable参数的目的?

Dav*_*man 10 c++ lambda perfect-forwarding auto c++14

在Scott Meyer的书" Effective Modern C++"(第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;
};
Run Code Online (Sandbox Code Playgroud)

我完全理解完美的转发params,但是当我完全转发func相关时,我不清楚.换句话说,上述优点有以下几点:

auto timeFuncInvocation = [](auto&& func, auto&&... params) {
  // start timer;
  func(
    std::forward<decltype(params)>(params)...
  );
  // stop timer and record elapsed time;
};
Run Code Online (Sandbox Code Playgroud)

Jar*_*d42 11

出于与参数相同的目的:所以何时Func::operator()是ref-qualified:

struct Functor
{
    void operator ()() const &  { std::cout << "lvalue functor\n"; }
    void operator ()() const && { std::cout << "rvalue functor\n"; }
};
Run Code Online (Sandbox Code Playgroud)

演示

  • 删除`const`部分,然后它会更好*感觉. (4认同)