Bonjour,

Je souhaite faire une classe Logger spéciale. En effet, je voudrais lors de cet appel :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
 Log() << "mot1" << 3 << "mot2";


Avoir comme chaine de sortie :
mot1(espace)3(espace)mot2(retour à la ligne)

Je suppose qu'il faudrait compter le nombre de variable qui passe par "<<" mettre des espaces devant tous, ne pas le mettre au premier, et ajouter la fin de ligne au dernier, mais je ne vois aucune manière de m'y prendre...

Voici le code (simplifié) de ma classe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Logger
{
public:
    Logger { }
    virtual ~Logger(){}
 
    static Logger * _instance;
    static Logger & log(); { return *_instance};
 
    template <class T>
    Logger & operator <<(const T& log);
 
protected:
    std::ostringstream stream;
 
private:
    virtual void write(const std::string& message)
    {
    	std::cout << ((message ).c_str());
    }
};
 
template <class T> Logger & Logger::operator <<(const T& log)
{
    stream << log;
    write(stream.str());
 
    stream.str(""); //clear
 
    return log(); 
}
 
static Logger& Log() {  return Logger::log();}
Si quelu'un pouvait me dire si cela est faisable ou pas, merci.