2010-11-15 4 views

Répondre

4

Vous pouvez utiliser une fonction simple qui imprime l'horodatage puis retourne le flux pour l'impression de plus:

std::ostream& tcout() { 
    // Todo: get a timestamp in the desired format 
    return std::cout << timestamp << ": "; 
} 

Vous pouvez ensuite appeler cette fonction au lieu d'utiliser directement std::cout, chaque fois que vous voulez un horodatage inséré:

tcout() << "Hello" << std::endl; 
6

Faites votre propre flux pour cette :) Cela devrait fonctionner:

class TimedStream { 
public: 
    template<typename T> 
    TimedStream& operator<<(const T& t) { 
     std::cout << getSomeFormattedTimeAsString() << t << std::endl; 
     return *this; 
    } 
}; 

TimedStream timed_cout; 

void func() { 
    timed_cout << "123"; 
} 

vous deviendriez être capable d'utiliser cette classe pour chaque type pour lequel std::cout << obj peut être fait, donc aucun travail supplémentaire n'est nécessaire.

Mais s'il vous plaît noter que l'heure sera écrite avant chaque <<, de sorte que vous ne pouvez pas les enchaîner facilement. Une autre solution avec horodatage explicite est:

class TimestampDummy {} timestamp; 

ostream& operator<<(ostream& o, TimestampDummy& t) { 
    o << yourFancyFormattedTimestamp(); 
} 

void func() { 
    cout << timestamp << "123 " << 456 << endl; 
} 
+0

+1, battez-moi. – rcollyer

+2

Si vous voulez pouvoir enchaîner les choses, pourquoi ne pas simplement rendre l'opérateur de TimedStream << return a std :: ostream & et retourner std :: cout? Puis timed_cout << x << y, qui se lie comme (timed_cout << x) << y, est comme faire timed_cout << x suivi de std :: cout << y. –

0

Cela ressemble à des devoirs. Vous voulez quelque chose dans la ligne de:

std::cout << time << "something"; 

trouver un moyen de la récupérer le temps sur votre système, en utilisant un appel système. Ensuite, vous devrez implémenter un opérateur < < pour votre classe/structure dépendant du système.

+2

Travail à domicile? Ressemble plus au début d'un cadre de notation de couteau d'armée suisse. :) – Kos

0
ostream& printTimeWithString(ostream& out, const string& value) 
{ 
    out << currentTime() << ' ' << value << std::endl; 
    return out; 
} 

Générez l'heure actuelle en utilisant votre format de sortie favori Boost.DateTime.

Questions connexes