C ++ 0x показує приклад використання std::forward
:
template<class T>
void foo(T&& arg)
{
bar(std::forward<T>(arg));
}
Коли вигідно використовувати std::forward
завжди?
Крім того, він вимагає використання &&
в декларації параметрів, чи він дійсний у всіх випадках? Я думав, що вам доведеться передати тимчасові функції до функції, якщо функція була оголошена &&
в ній, тож чи можна викликати foo з будь-яким параметром?
Нарешті, якщо у мене є такий виклик функції, як цей:
template<int val, typename... Params>
void doSomething(Params... args) {
doSomethingElse<val, Params...>(args...);
}
Чи слід використовувати це замість цього:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
}
Крім того, якщо використовувати параметри двічі у функції, тобто переадресацію на дві функції одночасно, чи розумно це використовувати std::forward
? Не std::forward
вдасться перетворити одне і те ж у тимчасове двічі, перемістивши пам'ять і зробивши її недійсною для повторного використання? Чи буде такий код у порядку:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
doSomethingWeird<val, Params...>(std::forward<Params>(args)...);
}
Мене трохи бентежить std::forward
, і я б із задоволенням скористався очищенням.
Args...&& args
?