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 : 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;
};
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?