W książce Scotta Meyera Effective Modern C++ on page 167 (w wersji drukowanej), daje następujący przykład:Cel perfekcyjnego przekazywania dla argumentu wywoływania w wyrażeniu wywołania?
auto timeFuncInvocation = [](auto&& func, auto&&... params) {
// start timer;
std::forward<decltype(func)>(func)(
std::forward<decltype(params)>(params)...
);
// stop timer and record elapsed time;
};
całkowicie rozumiem doskonałe przekazywanie params
, ale nie jest jasne do mnie, gdy doskonałe przekazywanie func
kiedykolwiek będzie istotnych. Innymi słowy, jakie są zalety powyższe na następujące:
auto timeFuncInvocation = [](auto&& func, auto&&... params) {
// start timer;
func(
std::forward<decltype(params)>(params)...
);
// stop timer and record elapsed time;
};
Kiedy 'func' ma operatora zakwalifikowanego do wywołania funkcji. –
Ohhhhhh .... ma sens. –