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::forward
her zaman avantajlıdır ?
Ayrıca, &&
parametre 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::forward
mıdır? Olmaz std::forward
hafı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::forward
ve memnuniyetle biraz temizlik yapardım.
Args...&& args
mi sanıyordum ?