Alors,
Cette ligne déclare une variable membre de type result_value, dont le nom est value.
1 2
| typedef typename result_type::iterator iter; //ligne 5
typedef typename result_type::const_iterator cst_iter; //ligne 6 |
Ces deux lignes déclarent des iterateurs. Ce sont des objets qui permettent de parcourir les objets stockés dans cet objet. Ici, ce sera sans doute pour parcourir value. Celui de la ligne 6 est un iterateur constant, c'est à dire que si on l'utilise, on ne pourra pas modifier l'objet sur lequel il pointe.
processus(int size = 0) : value(size) {}; //ligne 7
Ça c'est un constructeur. Il définit à la fois un constructeur par défaut (si aucun paramètre ne lui est fourni, size sera 0) et un constructeur qui prend un paramètre: size.
virtual result_type operator()() = 0;
Ça c'est l'opérateur d'appel de fonction. En général, il sert pour permettre l'utilisation de cet objet en tant que foncteur. Parfois, c'est juste pour simplifier son utilisation.
Ici, cet opérateur est virtuel pur, ce qui signifie (entre autres) que:
1. cette classe ne peut pas être instanciée. En java, on dirait que c'est une interface.
2. les classes qui héritent de celle-ci devront obligatoirement implémenter cette fonction. C'est la raison pour laquelle on parle souvent de "programmation par contrat" lorsqu'on utilise des fonctions virutelles pures: on signe un contrat avec les classes qui vont hériter, contrat qui consiste en l'implémentation de ces fonctiones virtuelles pures.
result_type current() const { return value; }; //ligne 9
Ça c'est un simple accesseur. Il est déclaré constant car, et c'est logique, il n'est pas sensé modifier l'instance qui l'appelle. Attention cependant, cet accesseur renvoie une copie de l'objet value.
1 2 3 4 5 6 7
| template <typename S> //ligne 10
friend std::ostream& operator<<(std::ostream &o, //ligne 11
const processus<S> &p) //ligne 12
{
o << 0;
return o;
} |
Ça c'est l'opérateur d'indirection de flux. C'est le même opérateur qui est utilisé dans le code suivant par exemple:
std::cout << "hello word" << std::endl;
Par contre, l'implémentation de cet opérateur est étrange (le corps de la fonction), je ne la comprend pas.
Partager