Est-ce que C ++ a un mot clé "avec" comme Pascal?
with
mot-clé dans Pascal peut être utiliser pour un accès rapide le champ d'un enregistrement.
Quelqu'un sait si C++ a quelque chose de semblable à cela?
Ex:
J'ai un pointeur à de nombreux domaines et je ne veux pas de type comme ceci:
if (pointer->field1) && (pointer->field2) && ... (pointer->fieldn)
ce que je veux vraiment, c'est quelque chose comme ça en C++:
with (pointer)
{
if (field1) && (field2) && .......(fieldn)
}
source d'informationauteur root
Vous devez vous connecter pour publier un commentaire.
En C++, vous pouvez mettre le code dans une méthode de la classe de référence par
pointer
. Vous pouvez y faire référence directement aux membres, sans l'aide du pointeur. Faireinline
et vous bien obtenir ce que vous voulez.Probablement le plus proche que vous pouvez obtenir est ceci: (Merci de ne pas downvote pour moi, c'est juste un exercice académique. Bien sûr, vous ne pouvez pas utiliser des variables locales dans le corps de ces artificiel
with
blocs!)Ou, un peu plus diaboliquement,
ou en C++0x
non, il n'est pas tel mot-clé.
Même si je programme principalement en Delphi qui a un
with
mot-clé (depuis Delphi est un Pascal dérivés), je n'utilise paswith
. Comme d'autres l'ont dit: il permet d'économiser un peu sur le typage, mais la lecture est rendue plus difficile.Dans un cas comme le code ci-dessous il peut être tentant d'utiliser
with
:À l'aide de
with
cela ressemble à ceJe préfère utiliser une technique différente, par l'introduction d'une variable supplémentaire pointant vers la même chose
with
serait pointant vers. Comme ceci:De cette façon, il n'y a pas d'ambiguïté, vous économiser un peu sur le typage et le but du code est plus clair que l'utilisation de
with
J'aime utiliser:
Exemple:
Non, C++ n'a pas de mot-clé.
C++ n'a pas de fonctionnalité. Et beaucoup le considèrent comme "AVEC" en Pascal d'être un problème, car il peut rendre le code ambigu et difficile à lire, par exemple, il est difficile de savoir si champ1 est un membre de pointeur ou une variable locale ou quelque chose d'autre. Pascal permet aussi de multiples avec des variables telles que "Avec Var1,Var2" ce qui rend encore plus difficile.
Le plus proche que vous pouvez obtenir est le chaînage de méthode:
pour l'établissement de plusieurs champs et
using
pour les espaces de noms.Première fois que j'ai entendu dire que quelqu'un n'aime pas "avec". Les règles sont parfaitement simple, pas différent de ce qui se passe à l'intérieur d'une classe en C++ ou en Java. Et ne pas oublier qu'il peut entraîner une importante optimisation du compilateur.
Avoir écrit de nombreux analyseurs, cela semble être une simple liste de chercher de l'objet nommé, soit statique ou dynamique. De plus, je n'ai jamais vu une situation où le compilateur n'a pas d'identifier correctement l'objet manquant et le type, de sorte que toutes ces mauvaises excuses pour ne pas permettre une AVEC ...ENDWITH construction semble être beaucoup de hooey. Pour le reste d'entre nous sujettes à la longue des noms d'objet, une solution de contournement consiste à créer de simples définit. N'a pas pu résister, supposons que j'ai:
Il n'y a pas une telle chose en C++.
Vous pouvez mettre le CODE comme c'est dans une méthode de l'OBJET, mais il n'est pas toujours souhaitable.
Avec C++11, vous pouvez obtenir assez proche, par la création d'alias avec le nom de l'OBJET.
Par exemple, le code donné dans la question elle ressemble à:
(L'entourant les accolades sont utilisées pour limiter la visibilité de alias
_
)Si vous utilisez un champ très souvent, vous pouvez alias directement:
L'approche suivante s'appuie sur un coup de pouce. Si votre compilateur prend en charge le C++0x du
auto
ensuite, vous pouvez l'utiliser et de se débarrasser de la poussée de la dépendance.Avertissement: merci de ne pas le faire dans n'importe quel code qui doit être maintenue ou lu par quelqu'un d'autre (ou même par vous-même dans quelques mois):
Je peux voir un exemple où "avec" est en fait utile.
Dans les méthodes pour les structures de données, vous avez souvent le cas:
les erreurs causées par les fautes de ce genre sont très difficiles à trouver.
Avec la "avec la" on pourrait écrire
Ce qui ne doit pas dépasser tous les autres négatifs mentionnés pour "avec", mais juste une info intéressante...
Peut-être vous pouvez:
Ou de créer un petit programme qui va comprendre
with
de déclarations en C++ et les traduire en une forme valide de C++.