Est-il possible de transmettre un conteneur STL dans un fichier d'en-tête? Par exemple, prenez le code suivant:Forward déclare un conteneur STL?
#include <vector>
class Foo
{
private:
std::vector<int> container_;
...
};
Je veux être en mesure de faire quelque chose comme ceci:
namespace std
{
template <typename T> class vector;
}
class Foo
{
private:
std::vector<int> container_;
...
};
peut-il être fait?
J'ai suivi votre lien vers la discussion, mais les gens ne semblent pas arriver à une conclusion. Apparemment, l'implémentation de stl ne doit ajouter aucun paramètre de template aux conteneurs standards. par conséquent, il devrait être autorisé à transmettre le modèle. – Haplo
C'est indéfini, @Haplo. Si l'implémentation * que vous utilisez * choisit de définir le comportement au-delà de ce que dit la norme, c'est génial, mais ce n'est pas encore défini, donc votre code ne sera pas portable. La conclusion (à en juger par les affirmations non contestées) est que la norme devrait l'autoriser, mais pas, et qu'il existe deux solutions de contournement: Envelopper les types standard dans les structures utilisateur déclarées en avant, ou mordre la balle et inclure l'en-tête standard . Ce dernier est facile à faire. –
"Les déclarations qui n'ont pas été contestées" sur Usenet ne sont guère une source autorisée. Mais, Jerry Coffin a raison quand il cite [namespace.std]/1. En pratique, si votre compilateur diagnostique les déclarations 'namespace std' dans des en-têtes non-système, ou si votre bibliothèque standard n'est pas implémentée en C++, alors vous pourriez avoir un problème, mais ces choses n'arrivent jamais – Potatoswatter