8
votes

C ++: Utilisation de la sécurité type pour distinguer les types de deux arguments int

J'ai diverses fonctions avec deux arguments INT (j'écris les fonctions et le code d'appel moi-même). J'ai peur de confondre l'ordre de l'argument dans certains appels.

Comment puis-je utiliser le type de sécurité pour que le compilateur me préviennent ou erronée si j'appelle une fonction avec une mauvaise séquence d'arguments (tous les arguments sont int)? P>

J'ai essayé TypeDefs: Typedef ne déclenche pas d'avertissements ou d'erreurs de compilateur: P>

typedef int X; typedef int Y; 

void foo(X,Y); 

X x; Y y; 

foo(y,x); // compiled without warning)


1 commentaires

Vous trouverez peut-être quelque chose comme ça utile: Calumgrant.net/units/units.html


3 Réponses :


4
votes

TypeDEF crée des alias de type. Comme vous l'avez découvert, il n'y a pas de sécurité de type là-bas.

Une possibilité, en fonction de ce que vous essayez d'atteindre, c'est utiliser Enum . Ce n'est pas complètement typographe non plus, mais c'est plus proche. Par exemple, vous ne pouvez pas transmettre un INT vers un paramètre Enum sans la jeter.


0 commentaires

12
votes

Vous devrez créer des cours d'emballage. Disons que vous avez deux unités différentes (disons, secondes et minutes), qui sont toutes deux représentées comme des INT. Vous auriez besoin de quelque chose comme les éléments suivants pour être complètement Typeafe: xxx

et une classe similaire pendant des secondes. Le constructeur explicite vous empêche d'utiliser accidentellement un int sous forme minute , mais l'opérateur de conversion vous permet d'utiliser un minute n'importe où que vous avez besoin d'un INT .


1 commentaires

Pour une implémentation plus complète et générique, vous pouvez également consulter Boost.org/ DOC / LIBS / 1_42_0 / BOOST / STORT_TYPEDF.HPP



-6
votes

Obtenez une note post-it. Écrivez dessus, en gros lettres, "x premier! Alors y!" Collez-le à l'écran de votre ordinateur. Honnêtement, je ne sais pas quoi d'autre conseiller. L'utilisation de classes d'emballage est sûrement trop excessive, lorsque le problème peut être résolu avec un post-it et un marqueur magique.


1 commentaires

Demandez aux développeurs de logiciels géographiques. Est-ce lat / long ou long / lat? Un cas classique où les classes d'emballage fonctionnent et post sa ne pas.