Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.4.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

Macro pour pointeur

Bonjour à tous,

Je voudrais faire une petite macro qui vérifie si un pointeur sur classe (qt ou perso) existe.

genre CHECKPT(MonPointeurSurClasse*)
cette fonction ferait juste un
 CHECKPT(MonPointeurSurClasse* pcl)
{
if (!pcl) return;
}
mais le problème est que le return ne doit pas se faire dans la fonction CHECKPT mais dans la fonction qui appelle CHECKPT.
De plus, étant donné que l'on ne sait pas à l'avance le type de classe a checker, il faut passer par les template.

Seul soucis, je ne veux pas passer par template car il faut instancier à chaque fois une classe de ce type.

j'ai plus trop d'idées là.

Avis au serialC++ killer

romain

Réponses

  • Salut,
    #define CHECKPT(p) (p != 0)
    ...
    if(!CHECKPT(monpointeur)) return;
    Mais je n'en vois pas trop l'intérêt, c'est quoi? :/

    Edit: en fait, je pense qu'il faut vraiment savoir l'utilité et l'utilisation attendue parce que ça me paraît trop trivial comme truc au dessus :D
  • Salut,
    j'essaie de faire cette macro simple mais que je vais étendre plus tard.
    Cette macro vérifiera l'existence du pointeur, de plusieurs objets de la classe, et sera appelée dans plusieurs routines.
    C'est juste un squelette de macro pour le moment mais est-il possible que le return soit dans la macro mais qu'il exit la fonction qui appelle la macro (cela éviterait le if return).

    mais bon, ah mon avis je vais devoir passer par les templates si la macro se complexifie.

    Je sais pas si j'ai été clair :-)

    romain
  • Ben, ce n'est de toute façon pas très robuste sachant qu'un pointeur libre (non null et non pointant vers une instance réélle) dira que le pointeur existe, mais lorsque que tu t'en serviras, *boumchtatrap*.
    Déjà, en utilisant un boost::shared_ptr tu t'en sortiras mieux. Tu seras certain qu'il est valide (sauf à vraiment tout faire pour le corrompre ce qui reste évidemment possible :))

    Ensuite, oui, je pense voir plus ou moins où tu veux en venir, mais il faut absoluement savoir écrire correctement une macro pour réduire les bugs, et n'oublie que le debug de macro c'est l'enfer comparé au debug de "vrai" code.
    Un template te permettra de t'en sortir plus clairement. Et si tu fournis une interface commune aux classes qu'il te faudra vérifier, alors tu peux même te passer de la solution template et faire une classe xxxChecker qui demandera les infos à xxxCheckable (par exemple). Mais j'extrapole un peu là :)
  • Il existe une fonction Qt pour ce genre de chose, je ne sais pas si ça correspond a ce que tu souhaite :
    void Q_CHECK_PTR ( void * pointer )

    P@sNox,
  • Pourquoi tu ne te servirai pas de la classe QPointer. Elle devrait t'apporter un comportement similaire à celle de boost. Sauf si tu ne développe pas en Qt mais en simple C++.
    Tout comme IrmatDen je pense qu'il serait meilleur d'utiliser une classe plutôt qu'une macro.
  • Salut

    c'est vrai, je vais me pencher sur une classe pure C++ comme vous me l'avez suggéré.

    Merci à tous.

    NB: PasNox : je vais regarder cette macro, elle pourrait me servir aussi.

    romain
Connectez-vous ou Inscrivez-vous pour répondre.