Wednesday, August 10, 2011

X-Macros to Print Enums

Very nice solution to make enums printable with X-macros:

langs.def:
X(XQuery)
X(CPlusPlus)
X(XPath)
X(JavaScript)
X(Java)

main.cpp:
#include <iostream>


enum Langs {
#   define X(a) a,
#   include "langs.def"
#   undef X
};


char const* const langs_str[] = { 
#   define X(a) #a,
#   include "langs.def"
#   undef X
};


std::ostream& operator<<(std::ostream& os, enum Langs c)
{
  return os << langs_str[c];
}


int main()
{
    std::cout << XQuery << " " << XPath << std::endl;
}


Output:

./main 
XQuery XPath

No comments:

Post a Comment