Основная цель: сконвертировать UNIX time в std::string
Когда я попытался заюзать подобный код:
std::string unixtimeToString( time_t ts )
{
// _CRT_SECURE_NO_WARNINGS
enum { numCStringSize = 0x80 };
const char strTimestampFmt[] = "%a, %Y-%b-%d, %H:%M:%S";
char timeCStr[ numCStringSize ];
std::tm * tmInfo = gmtime( &ts );
std::strftime( &timeCStr[0], numCStringSize, strTimestampFmt, tmInfo );
return std::string( timeCStr );
}
То получил справедливый варнинг от MS Visual Studio 2008 компиллера с кодом 4996.
Поэтому переписал на более безопасный:
std::string unixtimeToString( uint32_t timeStamp )
{
using namespace boost::posix_time;
using namespace boost::gregorian;
ptime unixEpoche( date( 1970, Jan, 1 ) );
ptime ts( unixEpoche + time_duration( 0, 0, timeStamp ) );
return to_simple_string( ts );
}
Но при таком коде моя тулза работающая на большом кол-ве файлах(папка c:\windows\ на Win 7 x64 sp1) начала притормаживать.
Сейчас передо мною три варианта:
1) Подавить сообщение о варнинге 4996 #pragma warning(push) -> #pragma warning(disable:4996) -> мой код -> #pragma warning(pop)
2) Подавить на уровне проекта, заюзав в опциях проекта _CRT_SECURE_NO_WARNINGS
3) Тоже самое что и п.1, но вынести отключение\включение во внешние инклуды вида disable_warning\restore_warning и это даст возможность еще и портабельно варнинги отключать.
Мне оба первых варианта не нравятся. В случае п.2 приходится согласиться на то что компиллер совсем меня не будет извещать о возможных багах. В случае п.1 падает читабельность кода, пусть даже и не намного, но все равно как-то не хочется.
В виду того что в голове каша хочется спросить у других кто как поступал?
ЗЫ:
Сильно не бейте ;)