Sérialisation, opérateurs de flux, et espaces de nommage
Hello,
Je fais actuellement un travail de sérialisation..
Soit la classe suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include <iostream>
#include <vector>
#include "vector.h" // voir autre code, ci-dessous
using namespace std;
namespace MyNamespace
{
class MyClass
{
vector<int> a;
friend std::ostream& operator<<(std::ostream &os, const MyClass& obj);
};
std::ostream& operator<<(std::ostream &os, const MyClass& obj)
{
return cout << obj.a;
}
} // fin de MyNamespace |
J'ai par ailleurs défini dans un autre fichier, nommé vector.h; la fonction suivante, sans aucun espace de nommage :
Code:
1 2 3 4 5 6
| template<typename T>
inline std::ostream& operator<<(std::ostream& out, const std::vector<T>& contents)
{
...
return out;
} |
Le problème est dans l'opérateur de flux pour MyClass : le compilateur ne trouve pas comment sérialiser obj.a, à moins que je ne définisse l'opérateur pour le vecteur au sein de l'espace std (dans le second fichier), ce que je ne suis pas supposé avoir le droit de faire.
Quelle serait la solution ?