Question

I ai un tampon char (ie. Octet) que j'envoie sur le réseau. À un certain moment dans l'avenir je pourrais vouloir passer le tampon à un type différent, comme unsigned char ou short. J'ai pensé à faire quelque chose comme ceci:

typedef char bufferElementType;

Et chaque fois que je fais quelque chose avec un élément tampon Je déclare comme bufferElementType plutôt que char. De cette façon, je pourrais passer à un autre type en changeant cette typedef (bien sûr, il ne serait pas aussi simple que cela, mais ce serait au moins facile d'identifier les endroits qui doivent être modifiés ... il y aura un bufferElementType à proximité) .

Est-ce une utilisation valable / bien de typedef? Est-il pas la peine? Est-ce que ça va me donner un mal de tête à un moment donné à l'avenir? Est-ce que ça va faire les programmeurs me haïssent Entretien et soins?

Je l'ai lu Quand devrais-je utiliser Typedef en C ++ , mais personne n'a vraiment couvert cela.

Était-ce utile?

La solution

Il est un usage grand (et normal). Vous devez être prudent, cependant, que, par exemple, le type sélectionné répondent aux mêmes critères signés / non signés, ou qu'ils réagissent aux opérateurs. Ensuite, il serait plus facile de changer le type après.

Une autre option consiste à utiliser des modèles pour éviter de fixer le type jusqu'à ce que le moment vous compilez. Une classe qui est définie comme suit:

template <typename CharType>
class Whatever
{
   CharType aChar;
   ...
};

est en mesure de travailler avec tout type char que vous sélectionnez, alors qu'il répond à tous les opérateurs de la même manière.

Autres conseils

Un autre avantage de typedefs est que, si elle est utilisée à bon escient, ils peuvent augmenter la lisibilité. A titre d'exemple vraiment stupide, un mètre et un degré peut être tous les deux doubles, mais vous souhaitez faire la différence entre eux. L'utilisation d'un typedef est ONC solution rapide et facile à faire des erreurs plus visibles .

Remarque : une solution plus robuste à l'exemple ci-dessus aurait été de créer différents types d'un mètre et un degré. Ainsi, le compilateur peut appliquer lui-même les choses. Cela nécessite un peu de travail, qui ne paie pas toujours, cependant. L'utilisation typedefs est un moyen rapide et facile de faire des erreurs visible , comme décrit dans l'article lié ci-dessus.

Oui, c'est l'utilisation parfaite pour typedef, au moins dans C

Pour C ++ on peut soutenir que les modèles sont une meilleure idée (comme Diego Sevilla a suggéré), mais ils ont leurs inconvénients. (Travail supplémentaire si tout en utilisant le type de données ne sont pas déjà enveloppé dans quelques classes, les temps de compilation plus lente et une structure de fichier source plus complexe, etc.)

Il est également judicieux de combiner les deux approches, qui est, donner un nom de typedef à un paramètre de modèle.

Notez que vous envoyez des données sur un réseau, char et d'autres types entiers peuvent ne pas être interchangeables (par exemple en raison de endian-ness). Dans ce cas, en utilisant une classe avec des fonctions spécialisées basé sur des modèles serait plus logique. (Envoyer envoie l'octet, envoyer il se transforme en ordre du réseau de premier octet)

Une autre solution serait de créer une classe « BufferElementType » avec des méthodes d'aide (convertToNetworkOrderBytes ()) mais je vais parier que ce serait un surpuissant pour vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top