7
votes

Typedef un modèle avec tous les arguments par défaut

Je déclare une classe modélisée avec tous les paramètres ayant des arguments par défaut, par exemple: xxx

puis les deux suivants sont équivalents: xxx

Cependant, je ne suis pas autorisé à faire: xxx

est-il possible d'atteindre un Typedef au même nom mais sans le Supports, comme ceci: xxx


0 commentaires

6 Réponses :


2
votes

Vous ne pouvez pas redéclaré un symbole avec un type différent, alors tout ce que vous pourrez faire ne fonctionnera pas comme vous vous attendez. Si vous souhaitez y parvenir, utilisez un nom différent comme alias: xxx


0 commentaires

8
votes

Je fais quelque chose comme ce qui suit, je ne sais pas si vous l'aimerez ou non:

template<typename TYPE = int>
class basic_Foo {};

typedef basic_Foo<int> Foo;


4 commentaires

aka "L'approche STDLIB". :)


Oui, la même chose s'est produite avec basic_string et amis :)


Vous feriez donc que si basic_foo est utilisé beaucoup plus que tout autre basic_foo ? La raison pour laquelle je demande est que cela semble être un nombre excessif de caractères à ajouter à un nom de classe, par opposition à: Typef Foo foo_int ou quelque chose comme ça.


@Lex Il essayait de remplacer la définition totale avec son nom, je suppose qu'il ne prévoit pas de l'utiliser avec un autre type. Dans votre cas, en utilisant basicien_ ne l'aiderait pas.



0
votes

Malheureusement, non, car foo est déjà le nom du modèle de classe lui-même et ne peut donc rien être autre dans la même espace de noms.


0 commentaires

1
votes
template<typename TYPE = int> class Foo {};

typedef Foo<> FooClone;

int main()
{
   Foo<int> one;
   Foo<> two;
   FooClone three;

   return 0;
}

0 commentaires

1
votes

Non. Bien que vous puissiez déclarer un typedef code> pour un class code> avec le même nom que la classe code>, car vous pouvez utiliser un Nom pour redéfinir un nom pour faire référence à Le type auquel il fait déjà référence.

typedef Foo<> Bar;


0 commentaires

1
votes

Si la déclaration Typef FOO <> FOO; est autorisé, par la suite le nom FOO en tant que modèle ne peut pas être spécifié. C'est-à-dire que ce qui suit devient invalide. xxx

si ce qui précède typé n'est pas autorisé dans la pratique, Si vous avez toujours besoin d'écrire foo comme foo <> , une macro comme ce qui suit répondra à l'objectif. xxx


1 commentaires

Peut être trop tard mais n'utilisez pas de définir à cette fin. Cela causera des problèmes à bien des égards. Vous ne pourrez jamais utiliser FOO avec un type différent. Vous ne pourrez jamais utiliser FOO dans un autre espace de noms.