2009-03-23 10 views
4

Vous pouvez avoir remarqué que les versions ultérieures de gcc est plus stricte avec les normes (see this question)importer toutes les variables de classe parente

Tous les membres hérités d'une classe de modèle doit être appelé en utilisant le nom complet, par exemple. ParentClass<T>::member au lieu de seulement member

Mais j'ai encore beaucoup de vieux code qui ne respecte pas cela. L'ajout de using ParentClass<T>::member pour chaque membre utilisé dans chaque classe est assez pénible. Est-il possible de faire quelque chose comme using ParentClass<T>::*? Je préférerais mieux que désactiver cette vérification en g ++ mais s'il y en a maintenant, comment puis-je la désactiver?

Modifier:

Selon C++ FAQ (de STH merci) ceux-ci sont la seule façon de résoudre correctement les noms de variables membres hérités:

  1. Modifier l'appel f()-this->f(). Puisque ceci est toujours implicitement dépendant dans un modèle, this->f est dépendant et la recherche est donc différée jusqu'à ce que le modèle soit réellement instancié, à quel point toutes les classes de base sont considérées.

  2. Insérer using B<T>::f; juste avant d'appeler f().

  3. Modifiez l'appel de f() en B<T>::f().

Alors maintenant, la recherche de l'interrupteur droit de désactiver la résolution de nom ...

Répondre

6

Pas vraiment une réponse à vous la question, mais vous can also writethis->member au lieu de ParentClass<T>::member. Ceci est le plus souvent plus facile à écrire et fait que le compilateur recherche member aux bons endroits.

Questions connexes