Est-ce que cela a un sens en C++ de définir les unités physiques comme des types séparés et de définir des opérations valides entre ces types ?
Y a-t-il un avantage à introduire un grand nombre de types et de surcharges d'opérateurs au lieu d'utiliser simplement des valeurs à virgule flottante pour les représenter ?
Exemple :
class Time{...};
class Length{...};
class Speed{...};
...
Time operator""_s(long double val){...}
Length operator""_m(long double val){...}
...
Speed operator/(const Length&, const Time&){...}
Où Time
, Length
y Speed
ne peut être créé que comme type de retour de différents opérateurs ?
17 votes
Cela se fait généralement au moment de la compilation avec des modèles. Voir boost.units par exemple.
2 votes
Voir aussi Métaprogrammation de modèles C++ : Concepts, outils et techniques de Boost et au-delà par David Abrahams et Aleksey Gurtovoy - il traite de l'analyse dimensionnelle en temps réel dans le domaine de l'informatique.
3.1
.0 votes
Voici un bon article qui traite de cette question exacte avec du code : R. Cmelik, N. Gehani, "Dimensional Analysis with C++," IEEE Software, Volume 5 Issue 3, May 1988, Page 21-27. Désolé, je n'ai pas le PDF pour vous.
1 votes
@bruce3141 : Cela semble plutôt étrange, un article sur le C++ qui précède même l'ANSI C89.
1 votes
@MSalters, je ne suis pas un gourou de l'histoire du développement C++ ; l'article souligne les avantages de "C++versus Ada" et reconnaît l'aide de Bjarne Stroustrup. C'est légitime, j'ai juste vérifié la date ; les classes et les exemples ont l'air cool, allez voir.
0 votes
J'ai cherché "Dimensional Analysis with C++" et j'ai trouvé ceci : se.ethz.ch/~meyer/publications/AUTRES/scott_meyers/
0 votes
@bruce3141 : J'ai compris grâce à Scott Meyers . 1989 était la vérification de l'exécution, ce qui est bien sûr possible dans presque tous les langages ; la véritable percée a été réalisée par Barton&Nackman en 1994.
0 votes
@MSalters, Oui, je suis tombé sur le travail de Scott Meyers il y a quelque temps ; vous avez raison, l'article de Barton & Nackman est celui auquel tout le monde se réfère. Je pense que c'était l'une des premières utilisations des modèles comme construction pour autre chose qu'un type de conteneur général, du moins selon Meyers, je n'ai pas encore mis la main sur l'article. Bonne discussion, merci.
0 votes
C'est tout à fait logique ! Il y a un an, Bjarne Stroustrup lui-même a fait une présentation à mon université à ce sujet. Voir diapositives 19 et suivantes .
2 votes
@kba : Il y a beaucoup trop d'images sans rapport dans les diapositives. Je n'arrive pas à comprendre ce que les éléphants sont censés faire avec la programmation C++. "Un langage de programmation léger et abstrait" Ouais, c'est ça. Et ça ne prend que 3 ans pour écrire un compilateur pour ça. De temps en temps, je commence à penser que les gars qui maintiennent la norme C++ ont une vision très bizarre de ce que leur langage est censé être.
0 votes
@SigTerm Ce ne sont que les diapositives du cours qu'il a utilisées, je ne me souviens pas de la pertinence pour les éléphants car c'était il y a plus d'un an. Ce que je veux dire, c'est qu'il a démontré exactement cela, donc je pense que c'est une assez bonne garantie que cela c'est logique . De plus, Stroustrup ne se contente pas de maintenir le C++, il l'a conçu et mis en œuvre.
0 votes
@SigTerm Je pense que l'éléphant contraste avec l'image de la diapositive précédente, qui montre les aveugles avec un éléphant. Le terme "léger" signifie que l'abstraction est légère, pas le langage, léger comme dans les facilités d'abstraction du C++ qui ajoutent peu à la surcharge d'exécution.