Bonjour,
J'ai vu qu'il était possible de stocker des fonctions comme des objets ordinaires grâce a std::function.
Ma question porte sur l'allocation mémoire d'un std::function dans un container, par exemple un vector.
Si je crée deux foncteurs :
Ces deux foncteurs ne prennent pas la même place en mémoire, add stocke un entier et addAndDivide deux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 //Contient un entier struct add { add(int a) : a(a) {}; int operator() (int x) { return x + a; }; int a; }; //Contient deux entiers struct addAndDivide { addAndDivide(int add, int divide) : a(add), b(divide) {}; int operator() (int x) { return (x+a)/b; }; int a,b; };
Pourtant, je peux les stocker dans un même vector:
Et voila ce que je ne comprends pas : ce code fonctionne. Comment se fait-ce ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 std::vector<std::function<int(int)>> action{add(1), addAndDivide(10,2)};
Je pensais qu'un même vector n'était capable de stocker qu'une collection d'objets de même taille. Ou alors le fonctionnement de std::function m'échappe.
Pourriez vous éclairer ma lanterne ?
Partager