在斯科特·迈耶(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::operator()是ref限定的时:

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

Demo

关于c++ - 完美转发调用表达式中的Callable参数的目的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36920485/

10-11 20:59