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
?