(J'ai lu Quelle est la durée de vie des foncteurs implicites dérivés de lambda en C++ ? déjà et il ne répond pas à cette question).
Je comprends que la syntaxe lambda C++ n'est que du sucre pour créer une instance d'une classe anonyme avec un opérateur d'appel et un certain état, et je comprends les exigences de durée de vie de cet état (décidées selon que vous capturez par valeur ou par référence). Dans l'exemple suivant, l'objet std::function
instance retournée va être utile ?
std::function<int(int)> meta_add(int x) {
auto add = [x](int y) { return x + y; };
return add;
}
Si c'est le cas, comment cela fonctionne-t-il ? ? Cela me semble un peu trop magique - je ne peux imaginer que cela fonctionne en std::function
copier toute mon instance, ce qui peut être très lourd selon ce que j'ai capturé - dans le passé j'ai utilisé std::function
principalement avec des pointeurs de fonctions nus, et les copier est rapide. Cela semble également problématique à la lumière de std::function
de l'effacement de type.