2010-10-02 25 views
1

Si la réponse est oui, pouvez-vous me dire pourquoi? voici un exemple:Est-ce une mauvaise pratique d'utiliser le nom d'un type pour une fonction ou une variable membre?

namespace urx { 
    struct reserved { }; 
    struct side { urx::reserved reserved() { /*...*/ } }; 
} 

int main() { 
    urx::side side; 
    side.reserved(); 
} 

reserved est utilisé à la fois un nom de type et un nom de fonction. side est utilisé à la fois pour un nom de type et un nom de variable. mais dans les deux cas, ils sont séparés par l'espace de noms urx et je spécifie toujours explicitement urx pour faire référence à un nom de type (pour plus de lisibilité).

Répondre

2

Je ne vois pas pourquoi ce serait mauvais. Je pense que je préférerais nommer mes fonctions membres avec de bons noms que d'inventer des noms artificiels difficiles à retenir pour les désambiguïser.

Certaines directives de codage sont écrites de telle sorte que ce cas ne peut pas se produire. En forçant les types à commencer par une lettre majuscule et fonctionne avec une lettre minuscule et autres.

Vous devez cependant éviter d'appeler vos fonctions membres en fonction des noms de modèles courants. Le programme suivant est mal formé selon le standard C++ actuel, bien que certains compilateurs tendent (pour le bien) à ignorer cette erreur. Clang et comeau donnent un avertissement

#include <vector> 
using namespace std; 

struct A { 
    template<typename T> 
    T vector(); 
}; 

int main() { 
    A a; 
    a.vector<int>(); // ill-formed! 
} 
"ComeauTest.c", line 11: warning: ambiguous class member reference -- function 
      template "A::vector" (declared at line 6) used in preference to 
      class template "std::vector" (declared at line 163 of 
      "stl_vector.h") 
    a.vector(); // ill-formed! 
    ^

It has been proposed pour se débarrasser de cela.

+1

Je pense que g ++ accepte le code sans donner d'avertissement. J'ai lu un de tes posts où tu avais posté un exemple similaire. Impossible de trouver ce fil. –

+0

Merci, j'ai eu ma réponse :) alors je devrais aller avec cette pratique. –