Bonjour,
(ps: ce post est une quasi-copie de
http://www.siteduzero.com/forum-83-2...es-facets.html
, faute de reponse)
J'ai un problème avec mes facets, je mets le code et j'explique apres:
Mon main.cpp, qui affiche chaque seconde l'heure courante:
<<<
#include <iostream>
#include <locale>
#include <Tools/Hour.hpp>
#include <Tools/Sleep.hpp>
int main(void)
{
std::cout << "Sample : Hour\n"
"Ctrl+C for quit\n" << std::endl;
ts::HourOFacet *Facet(new ts::HourOFacet("%H %M %S"));
std::cout.imbue(std::locale(std::cout.getloc(), Facet));
ts::SecIterator It = ts::Hour::Local();
for(size_t i = 0; std::cout << *It++ << std::endl; ++i)
{
ts::Sleep(1000);
if(i > 59)
{
*It = ts::Hour::Local();
i = 0;
}
}
return 0;
}
>>>
Facet.hpp
<<<
#ifndef TOOLS_HOUR_FACET_HPP_INCLUDED
#define TOOLS_HOUR_FACET_HPP_INCLUDED
#include <string>
#include <locale>
#include <ctime>
namespace ts
{
template<typename CharT> class BasicHourOFacet
: public std::time_put<CharT>
{
private:
/* Typedef */
typedef CharT char_type;
typedef std::basic_string<char_type> string_type;
typedef struct tm tm_type;
public:
/* Constructor */
BasicHourOFacet(const char_type *Format, size_t R = 0);
/* Destructor */
~BasicHourOFacet(void);
/* To string */
string_type ToString(const tm_type &Me) const;
/* ID */
static std::locale::id id;
private:
/* Data member */
const char_type *myFormat;
};
}
#include <Tools/Hour/Facet.inl>
#endif // TOOLS_HOUR_FACET_HPP_INCLUDED
>>>
Facet.inl
<<<
#include <sstream>
namespace ts
{
template<typename CharT>
std::locale::id BasicHourOFacet<CharT>::id;
template<typename CharT>
BasicHourOFacet<CharT>::BasicHourOFacet(const char_type *Format,
size_t R) :
std::time_put<char_type>(R),
myFormat (Format)
{}
template<typename CharT>
BasicHourOFacet<CharT>::~BasicHourOFacet(void)
{}
template<typename CharT>
std::basic_string<CharT> BasicHourOFacet<CharT>::ToString(const
tm_type &Me) const
{
std::basic_ostringstream<char_type> Oss;
put(Oss, Oss, Oss.fill(), &Me, myFormat, myFormat +
sizeof(myFormat));
return Oss.str();
}
}
>>>
Bon mon probleme vient de (main.cpp):
<<<
ts::HourOFacet *Facet(new ts::HourOFacet("%H %M %S"));
>>>
Plus precisement ca vient du "%H %M %S", seul les quatres premiers
caracteres sont "pris" (càd "%H %"), et je ne comprends pas pourquoi
(ca doit venir de ts::BasicHourOFacet::ToString())
Je rajouterais egalement que le code suivant marche:
<<<
#include <iostream>
#include <sstream>
#include <locale>
#include <ctime>
int main(void)
{
time_t TimeT = std::time(0);
const struct tm *Time = std::localtime(&TimeT);
const char Format[] = "%H %M %S";
const std::time_put<char> &TimePut =
std::use_facet<std::time_put<char> >(std::cout.getloc());
std:

stringstream Oss;
TimePut.put(Oss, Oss, Oss.fill(), Time, Format, Format +
sizeof(Format));
std::cout << Oss.str() << std::endl;
return 0;
}
>>>
Ce code est basé sur le meme principe que ma facet, pourtant avec ma
facet ca ne marche pas.
Voila, si je n'ai pas été assez clair, dites-le moi.
Merci