Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Editer du C++ template avec un editeur de texte

138 réponses
Avatar
Marc Boyer
Bonjour,

une petite question sur vos pratiques d'édition.

Pour écrire la définition de code de classe template, j'aimerais
bien séparer l'interface de l'implémentation.

Mais ça devient très lourd, du genre

template <class T>
typename X<T>::iterator X<T>::first_with(typename X<T>::cond& c){
....
}

alors que si je laisse dans la déclaration de la classe, ça donne
iterator first_with(cond& c);

Je m'en sort à grands coups de
#define X_TEMPLATE template<class T>
#define X X<T>
#define iterator typename X<T>::iterator
#define cond typename X<T>::cond

mais c'est lourd.

Vous faites comment vous ? Un super éditeur/IDE qui cache tout le sucre ?


Et sinon, pourquoi les classes (enfin, mon compilo) ne permettent elle pas
de faire

class X {
void foo(); // Déclaration
...
void foo(){...}; // Implementation
}

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

10 réponses

1 2 3 4 5
Avatar
drkm
Marc Boyer writes:

wrote:

J'espère que non. J'appelle ça l'obfuscation.


Pour donner un exemple issu de mon code, sans macro, cela donne:


[...]

Ah, c'est donc de là qu'elle venait, la macro StateSpaceNode ?-)

--drkm


Avatar
Marc Boyer
K. Ahausse wrote:
"Marc Boyer" a écrit dans le message
de news:cncmnn$l3m$

J'avais compris. Et en C, ça fonctionne parfaitement. En
C++, je n'ai pas regardé.

Ce qu'il y manque c'est la mise au point aisée comme sous Windows.


Genre ddd ?


'ddd' a été une épouvantable experience. 'insight' est la ce qui a le
mieux marché.


Je connaissais pas insight: j'ai bookmarqué le lien.
ddd suffisait à mes besoins.

Pour quels besoins ?
Xemacs+etags+gdb offre un certain nombre de fonctionnalités.


Je me faisais une autre vision d'un IDE confortable, mais c'est affaire de
goût.


Disons qu'il était disponible sur toutes mes plateformes de
travail et qu'il répond à mes besoins.
Jusqu'à présent, j'ai perdu plus de temps à essayer d'en changer
que je n'en ai gagné avec les alternatives.
Eclipse me tente là, mais bon...

D'autres, parlant de Microsoft, diront de 'dégoût', mais bon ... pour ma
part je ne veux parler que du plaisir d'utiliser un produit quelque soit le
constructeur.


Disons que le problème que je vois à VC++, c'est qu'il faudrait
que je travaille sur une machine Windows, et ça, je n'y étais pas
prêt. Il semble qu'il y ait des améliorations actuellement.

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.



Avatar
Marc Boyer
In article , drkm wrote:
Marc Boyer writes:

wrote:

J'espère que non. J'appelle ça l'obfuscation.


Pour donner un exemple issu de mon code, sans macro, cela donne:


[...]

Ah, c'est donc de là qu'elle venait, la macro StateSpaceNode ?-)


Oui, et comme un imbécile, j'ai cédé à mon vieux réflexe:
dans un .cpp, on peut définir toutes les macros qu'on veut,
ça reste local.
Sauf qu'en attendant export, ben, je fais un #include du .cpp.

Oui, je n'ai eut que ce que je méritais.

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.



Avatar
K. Ahausse
"Marc Boyer" a écrit dans le message
de news:cncvee$nlk$

Jusqu'à présent, j'ai perdu plus de temps à essayer d'en changer
que je n'en ai gagné avec les alternatives.


Oui c'est bien ça, malheureusement.

Eclipse me tente là, mais bon...

Disons que le problème que je vois à VC++, c'est qu'il faudrait
que je travaille sur une machine Windows, et ça, je n'y étais pas
prêt. Il semble qu'il y ait des améliorations actuellement.


Oui, je souhaite que l'utilisation de VC++ avec Linux ne soit que
transitoire, je ne d'espère pas non plus, de trouver une solution plus
homogène avec Linux.

Avatar
Luc Hermitte
Marc Boyer wrote in
news:cncj0u$l3m$:

VI[M]|[X]emacs + etags|ctags


Pour Vim, j'ai un truc (sur mon site) qui permet de sauter à
l'implémentation d'une fonction (même si il y a quinze niveaux de
namespace/classe) -- voire de générer le squelette de l'implémentation
s'il n'y en a pasencore. Seul truc, je ne me suis pas encore occupé de
gérer les templates, et il faut respecter une certaine convention dans
les séparations headers-TU.

C'est sensé faire exactement ça.
Ca marchait très bien en C, comme ce n'est pas exactement mon
besoin, je n'ai pas regardé pour C++.


J'avais regardé etags pour mettre en oeuvre un intellisence pour Vim
toujours. Mais il n'extrayait pas assez d'information. Je pense que c'est
un peu la même chose pour ce qui est de sauter de déclaration à
implémentation.


--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>

Avatar
drkm
Marc Boyer writes:

wrote:

Ça donne surtout un très fort couplage des fichiers, ce qui devient vite
insoutenable dans les grands projets.


Tu peux préciser ?


Si tu inclus l'implémentation dans l'en-tête, cela rend le code
client dépendant non seulement de l'interface de la classe, mais
également de son implémentation. L'idiome du Pimpl pousse plus loin
ce raisonnement en s'affranchissant de la dépendance à la définition
complète de la classe. Il transfère pour cela les membres privés dans
une tierce classe.

Si je me souviens bien du contexte, il est question de modèles, et
tu inclus de toute façon l'implémentation dans l'en-tête. Même dans
ce cas, je te conseille de séparer (cmme tu sembles d'ailleurs le
faire) l'en-tête de l'implémentation, et d'inclure celle-ci dans
celui-là.

[...]

Moi, déjà, si je pouvais voir la signature de ma classe rapidement
(sans avoir à passer par doxygen puis à revenir à xemacs...) se
serait pas mal.


EBrowse ou ECB pourraient t'intéresser.

--drkm


Avatar
drkm
Luc Hermitte writes:

J'avais regardé etags pour mettre en oeuvre un intellisence pour Vim
toujours. Mais il n'extrayait pas assez d'information.


As-tu regardé du côté d'EBrowse ?

--drkm

Avatar
drkm
Marc Boyer writes:

K. Ahausse wrote:

"Marc Boyer" a écrit dans le message
de news:cncj0u$l3m$


Ce que j'avais beaucoup apprécié sur VB, c'était la complétion
automatique en fonction du type.
Ca, seul un IDE peut le faire car cela demande une partie
de compilation en ligne.


Je ne sais pas ce que tu appelles IDE, mais la clef est d'analyser
le code. Emacs fait ça plutôt pas mal, cfr <URL:http://cedet.sf.net>.

La dernière fois que j'ai regardé ça de près, il était proposé
l'Intelli-Sense, mais le parseur n'analysait pas encore le corps des
fonctions. Maintenant, je pense qu'il y a moyen de lui demander de
les analyser également.

Cfr. CEDET et ECB.

Si une solution, au moins équivalente à VC++, existe sous Linux, un énorme
merci à celui qui pourrait la dévoiler.


Pour quels besoins ?
Xemacs+etags+gdb offre un certain nombre de fonctionnalités.


Un nombre certain, oui ;-).

--drkm


Avatar
Thomas Labourdette
Marc Boyer a écrit le mardi 16 Novembre 2004 09:15 :

Fabien wrote:

C'est que cette solution ne doit pas être des plus mauvaises...


J'avoue qu'en fait, je rève d'un bel IDE qui masque un peut
tout ce sucre: je sélectionne une classe, j'accède à sa définition,
son implémentation, ses spécialisation, tout ça bien rangé...


Il y a sourcenav qui est pas mal dans le genre :
http://sourcenav.sourceforge.net/

@+
--
Mathias DECAFÉ (signature aléatoire)
Qui pisse loin ménage ses chaussures.


Avatar
Marc Boyer
In article , drkm wrote:
Marc Boyer writes:
K. Ahausse wrote:
"Marc Boyer" a écrit dans le message
de news:cncj0u$l3m$
Ce que j'avais beaucoup apprécié sur VB, c'était la complétion

automatique en fonction du type.
Ca, seul un IDE peut le faire car cela demande une partie
de compilation en ligne.


Je ne sais pas ce que tu appelles IDE, mais la clef est d'analyser
le code. Emacs fait ça plutôt pas mal, cfr <URL:http://cedet.sf.net>.


IDE Integrated Dev. Env. non ?
En fait, ça demande à l'éditeur de faire un brin de compilation,
et c'est quand même plus facile à faire quand editeur+compilo sont
fait par la même équipe.
Mais j'ai parcouru ton lien: ça a l'air fouilli mais intéressant.
J'avais testé la speedbar, mais celle qui est installée par défaut
chez moi se vautre lamentablement (reconnaît pas les méthodes des
classes, confond class et fonction...).
Il semble qu'il me faille regarder plus en détail.

La dernière fois que j'ai regardé ça de près, il était proposé
l'Intelli-Sense, mais le parseur n'analysait pas encore le corps des
fonctions. Maintenant, je pense qu'il y a moyen de lui demander de
les analyser également.

Cfr. CEDET et ECB.


Merci,
Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.



1 2 3 4 5