Doit C++ éliminer les fichiers d'en-tête?

De nombreux langages tels que Java, C#, ne pas séparer la déclaration de mise en œuvre. C# est un concept de classe partielle, mais la mise en œuvre et de la déclaration de toujours rester dans le même fichier.

Pourquoi ne pas le C++ ont le même modèle? Est-il plus pratique d'avoir des fichiers d'en-tête?

Je me réfère à des cours et à venir versions de C++ standard.

  • Je crois que il n'y a pas de véritable raison pour les fichiers d'en-tête dans le C++. Toutes les informations stockées dans les est dupliquée dans la .rpc et peut être automatedly extrait (comme le montre l'www.lazycplusplus.com -- avertissement: havent utilisé). Le problème est la vitesse de compilation et C#&Java ont montré que cela soit insurmontable.
  • L'affichage de ce qu'un commentaire comme je ne suis pas certain de mes informations 🙂 et je ne sais pas pourquoi c'est arriver a voté vers le bas et de la clôture. C'est une excellente question de l'OMI. 😉
  • Comment www.lazycplusplus.com obtenez toutes les informations? Que faire si je voulais déclarer et de la réserve de vide pointeur dans le fichier d'en-tête pour une utilisation future? Il n'est jamais utilisé ou de référence dans le fichier cpp.
  • Merci.... Je n'ai aucune idée pourquoi il a été voté trop
  • Brian: tu veux dire quoi par "réserve un pointeur void"? Comme vous le savez probablement, de manière statique, les données allouées en C/C++ doit être défini manuellement dans le .rpc après avoir été déclarées dans l'en-tête (sauf si c'est un fichier dont l'étendue). Avec LazyC++, vous sautez simplement la tête de la déclaration et de l'écriture à la mise en œuvre-définition
  • J'aimerais voir une meilleure solution que les fichiers d'en-tête, mais en raison de la compatibilité ascendante questions (qui se transforment souvent en arrière combatibility - gotta love comment le changement de classe privée membres de les sauts de l'ABI vous forçant à utiliser PIMPLs) je ne pense pas que nous avons un moins pire alternative... Upvoted.
  • pas tous les renseignements sont dans le fichier cpp... si une méthode est virtuelle ou pas, c'est certainement pas dans le rpc. Relations de classe sont également pas partie de la rpc. La liste peut continuer, mais c'est suffisant pour réfuter l'allégation.
  • Je veux "pad" la sizeof la classe réservant de place pour l'expansion future. C'est assez fréquent dans Win32 structures de voir un réservé variable qui n'est pas utilisé pour quoi que ce soit, je ne parle pas des membres statiques.
  • Je vois maintenant que LazzC++ vous oblige à dupliquer beaucoup d'informations dans le fichier cpp. J'ai été vraiment question avec votre première déclaration que "Toutes les informations stockées dans les [fichiers d'en-tête] est reproduit dans le .rpc et peut être automatedly extrait" qui n'est tout simplement pas vrai.
  • Tim, en effet. C'est pourquoi, dans LazyC++ vous pouvez définir tous les membres de la classe à l'intérieur de la définition de la classe. Par exemple, votre source .rpc (pas d'en-tête, vous n'en avez pas) comme: class Foo { public: void manger() { /*du code*/ } void sleep() { /*du code*/ } };
  • Brian - voir ma réponse à Tim. Dans LazyC++ vous êtes en train d'écrire la définition de la classe (y compris tout rembourrage que vous voulez), vous ne sont tout simplement pas dupliquer les choses. Par ailleurs, votre "réserve" est un non-compatibles hack, vous êtes mieux avec le Chat du Cheshire idiome.
  • Vous pouvez délibérément d'écrire le code de cette façon, cependant, même après l'exécution de LazyC++, il va générer deux fichiers et le fichier cpp ne contiennent pas toutes les informations dans le fichier d'en-tête. Des fonctions virtuelles est un bien meilleur exemple que mon "unused variable" exemple.
  • Bien sûr, la rpc qui en résultent ne contiennent pas toutes les données présentes dans l'en-tête. Pourquoi ne vous vous souciez qu'bien? C'est juste un détail d'implémentation. Le point est que vous n'avez pas à vous inquiéter à ce sujet, le compilateur s'en occupe pour vous.
  • Relisez votre premier commentaire. Il suggère que je peux extraire mes fichiers d'en-tête à partir de mes fichiers cpp qui est absurde. Je peux cependant d'abord de les combiner ensuite utiliser LazyC++ pour les extraire. LazyC++ vous oblige à combiner, mais ce n'est pas la preuve de votre "dupliquer l'information" réclamation.
  • D'accord, je n'étais pas aussi clair que possible dans mon premier commentaire. Avec cela de la sorte, on peut peut-être revenir sur le sujet... que pensez-vous de l'OP question?
  • Ouais désolé pour garder l'affichage ami, c'est clair que nous comprenons tous les deux. Je suis déchiré sur la question. Le maintien d'un fichier d'en-tête est souvent fastidieux, mais un seul géant fichier peut être difficile de naviguer. LazyC++ est un concept intéressant, mais je vais fuir, sauf si il a été pris en charge par mon IDE/fournisseur de compilateur.