Showing posts with label boost. Show all posts
Showing posts with label boost. Show all posts

Monday, June 29, 2015

C++ Enum to String

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"
}

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();