C++0x montre un exemple d'utilisation de std::forward:
template<class T>
void foo(T&& arg)
{
bar(std::forward<T>(arg));
}
Quand est-il avantageux d'utiliser std::forward, toujours?
Aussi, il nécessite d'utiliser && dans les paramètres de déclaration, est-il valable dans tous les cas? J'ai pensé que vous deviez passer temporaires à une fonction si la fonction a été déclarée avec && elle, peut foo être appelée avec un paramètre?
Enfin, si j'ai un appel de fonction comme ceci:
template<int val, typename... Params>
void doSomething(Params... args) {
doSomethingElse<val, Params...>(args...);
}
Dois-je l'utiliser à la place:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
}
Aussi, si l'option utiliser les paramètres par deux fois dans la fonction, c'est à dire la transmission à deux fonctions en même temps, est-il sage d'utiliser std::forward? Ne std::forward convertir la même chose de temporaire de deux fois, le déplacement de la mémoire et de la rendre invalide pour une seconde utilisation? Serait le code suivant être ok:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
doSomethingWeird<val, Params...>(std::forward<Params>(args)...);
}
Je suis un peu confus par std::forward, et je me ferais un plaisir de les utiliser certaines de compensation.