L'exportation est prise en charge uniquement par le frontend EDG, commercialement disponible uniquement dans le compilateur Comeau autant que je sache. L'exportation n'élimine pas la nécessité d'une divulgation de source, ni ne réduit les dépendances de compilation, alors qu'elle nécessite un effort considérable de la part des constructeurs de compilateurs. Donc, Herb Sutter lui-même a demandé aux constructeurs de compilateurs d '«oublier» l'exportation. Comme l'investissement en temps serait mieux dépensé ailleurs ... je ne pense pas que l'exportation sera jamais mise en œuvre par d'autres compilateurs après qu'ils aient vu combien de temps cela a pris, et combien peu a été gagné. Le document s'appelle "Pourquoi on ne peut pas se permettre d'exporter", il est listé sur Sutters blog mais pas de pdf là-bas (un google rapide devrait le faire monter), il a six ans maintenant, je suppose qu'ils ont tous écouté et jamais ennuyé :)
Beaucoup de gens utilisent deux fichiers d'en-tête (par exemple .hpp
et .ipp
), l'un avec seulement la déclaration, et l'autre avec les définitions, alors il suffit d'en inclure un dans l'autre.
foo.hpp
#ifndef MY_TEMPLATES_HPP
#define MY_TEMPLATES_HPP
template< class T >
void foo(T & t);
#include "foo.ipp"
#endif
foo.ipp
#ifdef MY_TEMPLATES_IPP
nonsense here, that will generate compiler error
#else
#define MY_TEMPLATES_IPP
template< class T >
void foo(T & t) {
... // long function
}
#endif
Ce que des gains un peu de clarté, bien sûr, rien ne change vraiment par rapport à tout simplement inline tout dans un seul fichier d'en-tête.
Même avec l'exportation, vous ne pourrez toujours pas vous passer de la source (sous quelque forme que ce soit). Les docs EDG disent: "Les fichiers .et informent seulement le frontend sur l'emplacement des définitions de templates exportés, ils ne contiennent pas réellement ces définitions.Les sources contenant les définitions de template exportées doivent donc être disponibles au moment de l'instanciation (habituellement , quand la prélocation est faite). * En particulier, la facilité d'exportation n'est pas un mécanisme pour éviter la publication des définitions de modèles sous forme de source. * "(insistez par moi) –
@litb: C'est irritant. Mais merci pour votre réponse. –
Je n'ai pas vraiment implémenté de compilateur donc je ne suis pas en mesure de le dire, mais je crois que les créateurs d'EDG :) –