IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Ecriture d'une fonction imbriquée dans une autre


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Par défaut Ecriture d'une fonction imbriquée dans une autre
    Bonjour, je travail avec CodeBlocks et gcc.

    Je n'ai pas programmé en C++ depuis des années. Il me semble qu'avant, on pouvait écrire une fonction à l'intèrieure d'une autre fonction. L'avantage, c'est que l'accessibilité et la portée de cette fonction "fille" est limitée à la fonction mère et à sa durée de vie. Je n'arrive pas à l'écrire.
    Exemple de ce que je voudrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void MaFonctionMere(void)
    {
       void MafonctionFille(void)
       {
       ... // code de la fonction fille
       }
     
    ... // code de la fonction mere avec appel à la fonction fille
    }
    Merci de me raffraichir la memoire sur cette possible écriture.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Ce que tu veux faire n'est pas possible ni en C ni en C++
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    C'est seulement possible en GNU C, et je recommande de ne pas utiliser ce genre d'extension.

    Par contre, Visual C++ 8 accepte de me compiler ceci:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void TestClass(void)
    {
    	class UneClasseImbriquee {
    	public:
    		static void UneFonctionImbriquee(void)
    		{
    			std::cout << "Fonction Imbriquee!" << std::endl;
    		}
    	};
     
    	UneClasseImbriquee::UneFonctionImbriquee();
    }
    Mais j'ignore si ça passe sous gcc, ni ce qu'en dit la norme.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Par défaut
    Je dois peut être confondre avec le pascal que j'ai pratiqué aussi il y a pas mal d'années.
    Je vais faire autrement.
    Merci pour vos réponses.

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par kase74 Voir le message
    Je dois peut être confondre avec le pascal que j'ai pratiqué aussi il y a pas mal d'années.
    Oui, c'était faisable en Pascal mais cela n'apportait pas grand chose voire même cela compliquait la lecture (mais bon)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Ce code passe sans problème sous MinGW (Dev-C++, gcc 3.4.2) :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include <iostream>
    #include <string>
     
    void TestClass(void)
    {
    	class UneClasseImbriquee {
    	public:
    		static void UneFonctionImbriquee(void)
    		{
    			std::cout << "Fonction Imbriquee!" << std::endl;
    		}
    	};
     
    	UneClasseImbriquee::UneFonctionImbriquee();
    }
     
    int main(void)
    {
    	TestClass();
    	std::string line;
    	std::cout << "Press [Enter] to quit" << std::endl;
    	std::getline(std::cin, line);
    	return 0;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Oui, c'était faisable en Pascal mais cela n'apportait pas grand chose voire même cela compliquait la lecture (mais bon)
    Ca complique autant la lecture et ça a autant d'intérêt que les variables locales.

    Quand la fonction est très courte, pourquoi polluer l'extérieur avec une fonction dont on ne se servira qu'une seule fois, avec une fonction d'ordre supérieur style std::for_each(), std::find_if() ?

    Il faut se faire à l'idée qu'une fonction est une valeur comme les autres.

    ------

    Pour l'instant, tu es obligé d'écrire un foncteur explicite, mais bientôt avec la nouvelle norme du C++, tu pourras écrire des fonctions lambdas, ce qui est pratique si ta fonction est courte.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/04/2011, 08h06
  2. [AJAX] [XAJAX] Lancer une fonction JS dans une fonction AJAX
    Par sixieme-sens dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/12/2008, 15h26
  3. Réponses: 1
    Dernier message: 25/10/2007, 21h25
  4. Réponses: 10
    Dernier message: 18/04/2007, 17h17
  5. [VBA-E] Une fonction Excel dans une fonction VBA
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/07/2006, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo