Salut à tous,
Je bloque sur un truc depuis quelques temps et google ne trouve pas vraiment ce que je veux (ou j'ai mal cherché )
Je voudrait faire une fonction templatée qui envoie le contenu d'un std::vector<T> dans un std::ostream.
Sauf que j'aimerai que ça marche à la fois pour les type de base et pour des types persos qui sont dans un autre namespace (disons monnamespace).
Ces types sont des tableaux ou des vecteurs dont je veux connaitre la taille dans ma fonction.
Donc finalement je voudrais faire quelque chose comme ça:
Code :
- template <typename T>
- std::ostream& operator<<(std::ostream &out, const std::vector<T> &a)
- {
- bool montype=false;
- std::string type_name=typeid(T).name();
- if (type_name.find("monnamespace" )!=std::string::npos) montype=true;
- for (typename std::vector<T>::const_iterator i=a.begin(); i!=a.end(); ++i)
- {
- switch (montype)
- {
- case 0:
- out<<*i;
- break;
- case 1:
- int size=a[0].dim();
- for (size_t j = 0; j < size; ++j)
- out<<(*i)[j];
- break;
- }
- }
- return out;
- }
|
Mais ça ne marche pas car à la compilation il se rend bien compte que quand j'appelle la fonction sur un vector<double>, il ne peut pas trouver a[0].dim() sur un double ni mettre un indice [j].
Donc est-ce que quelqu'un sait comment faire ça?
Au pire je veux bien faire une fonction pour les std et une autre pour ceux de monnamespace mais je sais pas faire non plus On peut faire en sorte que le template ne s'applique qu'aux types d'un certain namespace?
Merci!