Est-il possible de stocker une fonction qui a un comportement similaire à la fonction suivante:fonctions de stockage C++ que l'attaquant références universelles
void target(int foo, size_t bar) {}
void target(std::string foo, int bar) {}
template<T...>
void forwarding_func(T&&... args)
{
target(std::forward<T>(args)...);
}
auto forwarding_callable = ?
Comment peut-on construire l'objet appelable pour les types T qui a le même comportement que la forwarding_func. Je dois le stocker pour une utilisation ultérieure, j'ai donc besoin d'un objet std :: function? Est-il possible de stocker même des lambdas comme ceux-ci dans les objets de fonction?
auto f = [](auto&& x){
myfunction(std::forward<decltype(x)>(x));
}
oui, il est possible d'utiliser lambdas. Si vous voulez les stocker, vous pouvez utiliser 'std :: function' ou une classe, modélisée sur le type d'un objet lambda passé. –
Il est possible de stocker une telle chose mais * not * dans un objet std :: function. –
S'il vous plaît noter, que votre exemple lambda (si cela a fonctionné) ne prend pas une référence universelle, mais une référence rvalue, c'est à dire. il n'accepterait que des valeurs comme argumentes. Je sais que vous demandez explicitement comment faire cela correctement, mais il me semble encore qu'il y a une certaine confusion là-bas. Vous pouvez lire l'article de Scott Meyer (https://isocpp.org/blog/2012/11/universal-references-in-c11-scott-meyers) sur la différence entre les références universelles et les références rvalue. – Knoep