我想知道使用完美轉發仿函數的正確方法是什麼?這裏有兩個代碼片段。哪一個是最好的,如果兩者都不是,最好的形式是什麼?完美轉發仿函數
template<typename T, typename... Args>
void callMe(T&& func, Args&&... args) {
func(std::forward<Args>(args)...);
}
或者
template<typename T, typename... Args>
void callMe(T&& func, Args&&... args) {
std::forward<T>(func)(std::forward<Args>(args)...);
}
編輯:
它會影響重載解析?如果func
的operator()
具有&&
或const &
的ref-qualifier,我應該執行後一個版本,並且應該關心我打電話給哪個超載?
謝謝!
後者是正確的,如果函數調用操作符可能有一個ref-qualifier –
@PiotrSkotnicki,你能舉一個你的意思嗎? –
@JohanLundberg http://coliru.stacked-crooked.com/a/2114bc29d189fde9 –