Stockage de std::function dans un container
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 :
Code:
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;
}; |
Ces deux foncteurs ne prennent pas la même place en mémoire, add stocke un entier et addAndDivide deux.
Pourtant, je peux les stocker dans un même vector:
Code:
1 2
|
std::vector<std::function<int(int)>> action{add(1), addAndDivide(10,2)}; |
Et voila ce que je ne comprends pas : ce code fonctionne. Comment se fait-ce ?
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 ?