C ++ 0x aşağıdakilere bir örnek gösterir std::forward:
template<class T>
void foo(T&& arg)
{
bar(std::forward<T>(arg));
}
Ne zaman kullanmak std::forwardher zaman avantajlıdır ?
Ayrıca, &¶metre bildiriminde kullanılmasını gerektirir , her durumda geçerli mi? Ben fonksiyonu ile bildirilirse, bir fonksiyona geçici geçmesi gerektiğini düşündüm &&, bu yüzden herhangi bir parametre ile foo çağrılabilir?
Son olarak, böyle bir işlev çağrısı varsa:
template<int val, typename... Params>
void doSomething(Params... args) {
doSomethingElse<val, Params...>(args...);
}
Bunun yerine kullanmalıyım:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
}
Ayrıca, parametreler işlevde iki kez kullanılırsa, yani aynı anda iki işleve yönlendiriliyorsa, kullanmak akıllıca std::forwardmıdır? Olmaz std::forwardhafızayı hareketli iki kez geçici aynı şeyi dönüştürmek ve ikinci bir kullanım için geçersiz hale? Aşağıdaki kod iyi olur:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
doSomethingWeird<val, Params...>(std::forward<Params>(args)...);
}
Biraz kafam karıştı std::forwardve memnuniyetle biraz temizlik yapardım.
Args...&& argsmi sanıyordum ?