2009-07-20 3 views
1

Question générale: Où est la classe habituellement définie, namespace.où définissez-vous typedef pour les cartes complexes?

Mon cas:

Je n'utilise cette correspondance dans ma mise en œuvre de la classe:

std::map<const std::pair<string, string>,const string*> 

et je me demande où est-il un bon endroit pour le mettre dans la classe (en public :) ou le fichier d'en-tête englobant? Je n'ai pas namespaces

Répondre

11

Si elle est dans votre classe seulement, je mets habituellement au sommet de la section privée:

class Foo 
{ 
public: 
    void some_functions(void); 

private: 
    typedef std::pair<std::string, std::string> StringPair; 
    typedef std::map<StringPair, std::string> StringPairMap; 

    StringPairMap _stringMap; 
} 

Pour clarifier les choses, comme la plupart des choses que vous voulez préciser ces choses aussi local que possible. Les variables doivent faire ceci: vous ne définissez pas int i pour votre boucle for jusqu'à ce que vous ayez atteint la boucle, etc.

De même, si votre classe utilise ces typedef en interne, faites ce que j'ai dit plus haut. Si seulement une fonction spécifique de votre classe a besoin de cette typedef, placez le typedef au début de cette fonction.

Si vous avez besoin d'exposer ce typedef aux clients de la classe, j'aime placer le typedef en haut de la section public.

+1

Je voudrais upvote, mais ce 'vide 'dans votre liste de paramètres me fait mal aux yeux. – avakar

+1

Je l'ai toujours trouvé plus clair. C'est un appel de fonction: 'int i = perform_calc()'. Il n'y a pas de «vide», donc en y mettant un «void», je n'ai plus à me souvenir du contexte lorsque je lis des fonctions («est-ce un appel de fonction ou une définition de fonction»?) – GManNickG

+0

de nouveau en toi. – Eugene

1

Mettez-le où vous l'utilisez. Si vous l'utilisez dans la section privée du fichier d'en-tête, déclarez le typedef ici. Si vous l'utilisez uniquement dans le code d'implémentation du fichier .cpp, déclarez le typedef dans ce fichier.

0

Cela dépend, avez-vous besoin de ce type comme dans l'interface publique de la classe? Si oui, je le déclarerais dans la section publique de la classe. Si vous ne l'utilisez que dans la partie privée de la classe, déclarez-la là. Et si vous ne l'utilisez que dans l'implémentation, déclarez-le là. En général, ne le déclarez jamais dans un espace de noms global dans un fichier d'en-tête (ou assurez-vous de préfixer le nom avec quelque chose qui n'entrera pas en conflit).

La règle générale est de rendre la décélération visible/accessible au plus petit sous-ensemble de votre programme.

Questions connexes