Je déclare une classe modélisée avec tous les paramètres ayant des arguments par défaut, par exemple: puis les deux suivants sont équivalents: p> Cependant, je ne suis pas autorisé à faire: p> est-il possible d'atteindre un Typedef code> au même nom mais sans le Supports, comme ceci: p>
6 Réponses :
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:
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;
aka "L'approche STDLIB". :)
Oui, la même chose s'est produite avec basic_string code> et amis :)
Vous feriez donc que si basic_foo
basic_foo
Typef Foo
@Lex Il essayait de remplacer la définition totale i> 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.
Malheureusement, non, car foo code> 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. P>
template<typename TYPE = int> class Foo {}; typedef Foo<> FooClone; int main() { Foo<int> one; Foo<> two; FooClone three; return 0; }
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;
Si la déclaration si ce qui précède Typef FOO <> FOO; code> est autorisé, par la suite le nom
FOO code> en tant que modèle ne peut pas être spécifié.
C'est-à-dire que ce qui suit devient invalide.
typé code> n'est pas autorisé dans la pratique,
Si vous avez toujours besoin d'écrire
foo code> comme
foo <> code>, une macro comme ce qui suit
répondra à l'objectif. p>
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.