Des années plus tard, dans ses GOTW compilés dans Exceptional C++, Herb Sutter nous fait réfléchir à l’interface monolithique de std::string et à toutes ses fonctions qui auraient pu être libres plutôt que membres dans cette classe standard — std::string représente des chaînes de caractères. Sa préconisation est d’élargir au maximum l’interface des classes par l’extérieur et de garder membres uniquement les fonctions qui ont besoin d’aller taper dans les membres privés, ou qui peuvent être supplantées par redéfinition (overridding en VO).
C'est typiquement pas le cas des méthodes size() et data() (pour empty() on peut l'implémenter à partir de size() si la complexité de cette dernière est constante).
D'un point de vue de la syntaxe, c'est un peu plus compliqué que cela. Dire que a.f(b), b.f(a) et f(a, b) n'est qu'une convention, c'est aller un peu vite... Écrire myValue.addTo(myArray) choque tout le monde quelque soit le langage.
D'un point de vu pratique il n'est pas pratique d'avoir de l'autocomplétion sur des méthodes libres.
D'un point de vu lecture, le chainage est plus compliqué de mon point de vu :
bar(foo(a),b);
vs
a.foo().bar(b);
Ça peut permettre le multidispatch, mais j'ai rarement eu besoin de ça (mais ça c'est mon expérience), mais surtout ça se comporte comment si j'ai une classe B qui hérite de A une classe D qui hérite de D et 2 méthodes :
foo(B&b,C&c);foo(A&a,D&d);
et que je tente :
foo(newB(),newD());
Au final tout ça c'est pour tenter de singer du structural typing ? Autant en faire réellement, non ? (d'autant que c'est ce que permettait les concepts, si je ne m'abuse).
# Hum hum...
Posté par barmic . En réponse à la dépêche C++17 libère size(), data() et empty(). Évalué à 3.
C'est typiquement pas le cas des méthodes
size()etdata()(pourempty()on peut l'implémenter à partir desize()si la complexité de cette dernière est constante).D'un point de vue de la syntaxe, c'est un peu plus compliqué que cela. Dire que
a.f(b),b.f(a)etf(a, b)n'est qu'une convention, c'est aller un peu vite... ÉcriremyValue.addTo(myArray)choque tout le monde quelque soit le langage.D'un point de vu pratique il n'est pas pratique d'avoir de l'autocomplétion sur des méthodes libres.
D'un point de vu lecture, le chainage est plus compliqué de mon point de vu :
vs
Ça peut permettre le multidispatch, mais j'ai rarement eu besoin de ça (mais ça c'est mon expérience), mais surtout ça se comporte comment si j'ai une classe B qui hérite de A une classe D qui hérite de D et 2 méthodes :
et que je tente :
Au final tout ça c'est pour tenter de singer du structural typing ? Autant en faire réellement, non ? (d'autant que c'est ce que permettait les concepts, si je ne m'abuse).