私が『 Effective Modern C++』で見たコード スニペットには、関数 timerを作成するインストルメンテーションの理論的根拠の巧妙な実装があります。
auto timeFuncInvocation =
[](auto&& func, auto&&... params)
{
start timer;
std::forward<decltype(func)>(func)(
std::forward<decltype(params)>(params)...);
stop timer and record elapsed time;
};
私の質問はstd::forward<decltype(func)>(func)(...
- 私の理解では、実際には関数を元の型にキャストしていますが、なぜこれが必要なのですか? 簡単な呼び出しでうまくいくようです。
- 関数呼び出しを行うために完全転送を使用する他のケースはありますか?
これは、タイマー型をコンパイル時の定数にしたい場合に備えて、ラムダ式で使い慣れたテンプレート構文を使用するための良い使用例のように見えます。