// chapitre 5 locale.cpp : définit le point d'entrée pour l'application console.
//

#include "stdafx.h"

#include <fstream>
#include <locale>
using namespace std;

struct Monnaie
{        
    Monnaie (const double montant)
        : m(montant) {}
    
    double m;
};

class monnaie_put: public locale::facet 
{              
public:
  static locale::id id;                                   

  monnaie_put (std::size_t refs = 0)
    : std::locale::facet (refs) { }                          

  string put (const double &m) const
  {
		char buf[50];
		sprintf(buf,"%g Euro",m);
		return string(buf);
  }
};

locale::id monnaie_put::id;

ostream& operator<< (ostream& os, const Monnaie& mon)
{
  std::locale loc = os.getloc ();                           
  const monnaie_put& ppFacet 
                     = std::use_facet<monnaie_put> (loc);     
  os << ppFacet.put(mon.m);          
  return (os);
}

int main(int argc, char* argv[])
{	
	cout.imbue (locale (locale::classic (), new monnaie_put)); 
	Monnaie m(30);
	cout << m;	// affiche 30 Euro
	return 0;
}

