En très très très gros, ce que dit Stepanov, c'est qu'au lieu de faire :
on peut faire :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 class StringConvertible // en gros une interface à la Java { public: virtual std::string toString() const = 0; }; class A : public StringConvertible { char* ch; // etc public : std::string toString() const { return std::string(ch); } }; void f(const StringConvertible& foo) { // ... } // plus loin A a; // ... f(a);
Donc imposer une contrainte syntaxique, comme c'est prévu avec les concepts, plutôt qu'à tout prix passer par une interface, et docn tout faire à 200% en OO.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class A { char* ch; // etc public : std::string toString() const { return std::string(ch); } }; template <class T> void f(const T& foo) { std::string s = foo.toString(); // ... }
En C++, le courant tend à vouloir tirer le meilleur de la POO et de la programmation générique. C'est ça qu'il veut dire.