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 :

Gestion des exceptions (meta-programmation)


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    D�veloppeur Autodidacte
    Inscrit en
    Janvier 2008
    Messages
    46
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur Autodidacte

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par d�faut Gestion des exceptions (meta-programmation)
    Bonjour

    Je me demande si il existe des instructions pour d�clencher une erreur ou un avertissement du compilateur.

    Exemple:

    Code : 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
     
    template<int T> class MaClasse
    {
    public:
    	MaClasse(){}
    	~MaClasse(){}
    };
     
    template<> class MaClasse<5>
    {
    public:
    	MaClasse(){/*
    		instruction déclenchant une erreur ou un
    		avertissement à la compilation
    	*/}
    	~MaClasse(){}
    };
    Dans l'exemple ci-dessus toute les valeurs enti�res peuvent �tre pass� en param�tre template sauf la valeur 5 qui d�clenche une erreur ou un avertissement.

    Mon but est de g�rer les exceptions comme avec try/throw/catch, mais � la compilation et non � l'ex�cution.

    Il y a l'instruction #error qui d�clenche une erreur � la compilation mais comme celle-ci est une commande du pr�processeur je ne crois pas qu'elle puisse m'aider.

    Ces instructions existent-elles et sinon, comment fait-on pour g�rer les "meta-exceptions"?

    Merci de prendre le temps de me r�pondre.

  2. #2
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Ce ne sont pas des exceptions, puisqu'il s'agit d'erreurs non recoverables.
    Cherche static_assert...

  3. #3
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

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

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Ou BOOST_STATIC_ASSERT sur les compilateurs qui n'impl�mentent pas encore static_assert, qui est une fonctionnalit� de la prochaine norme C++, apr�s tout.
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  4. #4
    Membre chevronn�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Sant�

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Par d�faut
    Sans avoir � utiliser boost : click.

  5. #5
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Bonjour,
    Tu peux aussi utiliser boost enable_if (et son pendant, disable_if) .

  6. #6
    Membre averti
    Homme Profil pro
    D�veloppeur Autodidacte
    Inscrit en
    Janvier 2008
    Messages
    46
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur Autodidacte

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par d�faut
    � moins que je sois dans l'erreur, ce qui n'est pas improbable car je suis mauvais en anglais, tout les liens que vous m'avez donn�s n�cessitent soit la biblioth�que Boost ou le mot-cl� static_assert...

    Je suis all� sur la FAQ pour apprendre ce qu'est la biblioth�que Boost et elle me semble tr�s utile, apprendre � m'en servir est une des prochaines choses que je ferai.

    J'ai v�rifi� et mon EDI ne semble pas conna�tre le mot static_assert.

    Donc, la seule solution sans Boost ni static_assert que j'ai trouv� est celle-ci:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    template<bool> struct Test{};
    template<> struct Test<true>{
    	static void Do(){};
    };
     
    template<int T> class MaClasse
    {
    public:
    	MaClasse(){
    		Test<T != 5>::Do();
    	}
    	~MaClasse(){}
    };
    Cette technique n'est pas tr�s �l�gante...
    Premi�rement, je ne peux d�clencher que des erreurs, pas d'avertissements et deuxi�mement, j'aurais aim� envoyer un message au compilateur expliquant la nature du probl�me, comme avec les assertions statiques.

    Si boost fonctionne avec des compilateurs qui n'impl�mente pas static_assert, ce que je cherche � faire est possible sans boost ni static_assert, mais peut-�tre est-ce long et compliqu� � impl�menter.
    Sinon, j'aimerais bien savoir comment le faire moi-m�me.

    Merci de pardonner ma manie de r�inventer la roue.

Discussions similaires

  1. Gestion des erreurs et des exceptions en programmation Win32
    Par masterx_goldman dans le forum Windows
    R�ponses: 1
    Dernier message: 05/05/2010, 20h35
  2. [ORACLE 9i] Gestion des exceptions
    Par sygale dans le forum SQL
    R�ponses: 6
    Dernier message: 19/08/2004, 15h06
  3. Gestion des exception (EOleException)
    Par shurized dans le forum Bases de donn�es
    R�ponses: 5
    Dernier message: 30/06/2004, 17h25
  4. [XMLRAD] gestion des exceptions
    Par pram dans le forum XMLRAD
    R�ponses: 2
    Dernier message: 28/01/2003, 17h48
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    R�ponses: 7
    Dernier message: 05/06/2002, 14h11

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