Here is the simpliest (I think) boost-preprocessor library based approach (from stackoverflow) for converting enum values to string:
#include <boost/preprocessor.hpp>
#define X_ENUM_STRING_TOSTRING_CASE(r, data, elem) \
case elem : return BOOST_PP_STRINGIZE(elem);
#define ENUM_STRING(name, enumerators) \
enum name \
{ \
BOOST_PP_SEQ_ENUM(enumerators) \
}; \
\
inline const char* toString(name val) \
{ \
switch (val) \
{ \
BOOST_PP_SEQ_FOR_EACH( \
X_ENUM_STRING_TOSTRING_CASE, \
name, \
enumerators \
) \
default: \
assert(false); return "[Unknown " BOOST_PP_STRINGIZE(name) "]"; \
} \
}
// Usage sample:
ENUM_STRING(Button, (Ok)(Close)(Retry)(Yes)(No)(Abort)(Help)(Cancel))
void foo()
{
std::string btnHelpName = toString(Button::Help); // btnHelpName == "Help"
std::string btnCloseName = toString(Button::Close); // btnCloseName == "Close"
}
Showing posts with label boost. Show all posts
Showing posts with label boost. Show all posts
Monday, June 29, 2015
Sunday, December 29, 2013
Three ways to get UTC time in C++
1. C++ way:
#include <ctime>std::string currentDateTimeUTC( )
{
struct tm tm;
std::time_t time = std::time(nullptr);
if (gmtime_s(&tm, &time))
return ("");
char utc[_countof("1970-01-01T00:00:00")];
strftime(utc, _countof(utc), "%Y-%m-%dT%H:%M:%S", &tm);
return (utc);
}
auto result = currentDateTimeUTC( );
2. boost way:
#include <boost/date_time/posix_time/posix_time.hpp>
using namespace boost::posix_time;
auto result = to_iso_extended_string(second_clock::universal_time());
3. Qt way:
#include <QDateTime>
auto result = QDateTime::currentDateTimeUtc().toString(Qt::ISODate).toStdString();
Subscribe to:
Posts (Atom)
