132 votes

Comment avant de déclarer une classe de modèle ?

<pre><code></code><p><code></code>(je pense que l’allocateur). Mais, ce n’est pas la question. Ce que je dois savoir la déclaration de modèle complet d’une classe de modèle pour pouvoir avancer le déclarer ?</p><p>EDIT : je n’étais pas en utilisant un pointeur avant - c’était une référence. Je vais l’essayer avec le pointeur.</p></pre>

147voto

Jon Purdy Points 19408

Le problème n'est pas que vous ne pouvez pas transmettre la déclaration d'une classe template. Oui, vous avez besoin de connaître tous les paramètres du modèle et leurs valeurs par défaut pour être en mesure de déclarer correctement:

namespace std {
  template<class T, class Allocator = std::allocator<T>>
  class list;
}

Mais pour faire de même une déclaration anticipée en namespace std est explicitement interdite par la norme: la seule chose que vous êtes autorisé à mettre en std est un modèle de spécialisation, communément std::less sur un type défini par l'utilisateur. Quelqu'un d'autre peut citer le texte si nécessaire.

Juste #include <list> et ne vous inquiétez pas à ce sujet.

Oh, d'ailleurs, n'importe quel nom contenant double soulignement est réservé pour une utilisation par la mise en œuvre, de sorte que vous devriez utiliser quelque chose comme TEST_H au lieu de __TEST__. Il ne va pas générer un avertissement ou une erreur, mais si votre programme a un clash avec une mise en œuvre de l'identifiant défini, alors il n'est pas garanti pour compiler ou exécuter correctement: c'est mal formé. Également interdits sont les noms qui commencent par un caractère de soulignement suivi d'une lettre majuscule, entre autres. En général, ne pas démarrer les choses avec des traits de soulignement, sauf si vous savez ce qu'est la magie que vous faites affaire avec.

20voto

user1638075 Points 81

J’ai résolu ce problème.

J’étais en œuvre une couche du modèle OSI (fenêtre de curseur, niveau 2) pour une simulation de réseau en C++ (Juno Eclipse). J’ai eu des cadres (modèle `` ) et de ses États (modèle d’État, déclaration anticipée).

La solution est la suivante :

Dans le `` fichier, vous devez inclure le fichier d’en-tête que vous transférez, c'est-à-dire

La RPC :

Et... une autre classe.

10voto

Grozz Points 3586

Déclaration anticipée devrait avoir la liste d’arguments template complet spécifié.

-5voto

Arne Points 866

Il existe une alternative limitée, que vous pouvez utiliser

en-tête :

RPC :

ne pas testé en programmes réels, alors attendez qu’il soit non-parfait.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X