Page 1 of 1

Représentation des spécialisation de template de classe

PostPosted: Fri 5 Jul 2019 06:35
by Teaniel
Bonjour,

Une nouvelle proposition, toujours liée aux évolutions du C++ : Il est actuellement impossible de représenter la spécialisation d'un template de classe dans BOUML. En effet :
Code: Select all
template <class _T1, class _T2>
class A { ... };

template <class _T1>
class A<_T1> { ... }; // Spécialisation partielle possible de A<_T1,_T2> (

template <class _T1>
class A<unsigned> { ... }; // Autre spécialisation partielle possible de A<_T1,_T2>

template <>
class A<int,unsigned> // Spécialisation complète de A
{ ... };

sont des constructs valides en C++, mais, du fait qu'il est interdit de réutiliser un nom dans un package, leur représentation en est interdite (à moins que je n'aie manqué un chapitre?).
Ma proposition est de lever l'interdiction de la réutilisation d'un nom, si le nom déjà créé comporte des paramètres template (en gros, ajouter la liste des paramètres template dans le contrôle d'unicité du nom des classes).
Si vous pouviez prendre cette proposition en compte j'en serais très heureux, car je souhaite effectivement pouvoir utiliser ces fonctionnalités dans mon actuel projet.
Par avance merci,
Marc

Re: Représentation des spécialisation de template de classe

PostPosted: Fri 5 Jul 2019 21:45
by Bruno Pagès
Bonsoir,

Ce que vous demandez est déjà disponible, et est également géré par le reverse. Par exemple placer les définitions suivantes dans un fichier

template <class _T1, class _T2>
class A { _T1 t1; };

template <class _T1>
class A<_T1> { _T1 t1; }; // Spécialisation partielle possible de A<_T1,_T2> (

template <class _T1>
class A<unsigned> { _T1 t1; }; // Autre spécialisation partielle possible de A<_T1,_T2>

template <>
class A<int,unsigned> // Spécialisation complète de A
{ int t1; };


faites un reverse C++ de ce fichier et vous obtiendrez :

Image

Cordialement,
Bruno Pagès

Re: Représentation des spécialisation de template de classe

PostPosted: Sat 6 Jul 2019 07:41
by Teaniel
Bonjour,

Excellent, je vous remercie!
Je n'avais pas pensé à mettre le paramètre dans le nom.

Cordialement,
Marc