Bonjour,

Je cherche a surchargé l'operateur << pour un flux de type std::ostream pour y concaténé une string managé de type System::String^.

Voici l'implementation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
static ostream& operator<< (ostream& tmpOss, System::String^ message)
{
	string system = StringMarshaler::MarshalToNative(message);
	tmpOss << system;
	return tmpOss;
}
La méthode StringMarshaler::MarshalToNative transforme une string managée system::String^ en std::string. Voici le code si ca peut vous interesser :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
ref class StringMarshaler
{
public:	
	static std::string MarshalToNative(System::String^ s)
	{
		char* ret=static_cast<char*>(System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(s).ToPointer());
		std::string sret=ret;
		System::Runtime::InteropServices::Marshal::FreeHGlobal((System::IntPtr)ret);
		return sret;
	}
}
Le problème c'est que ca ne marche pas tres bien , il ajoute dans mon flux une adresse de pointeur au lieu du contenu de la string. Je voulais savoir si on peut écrire ce genre d'operateur.

Merci d'avance