For C ++, I use this:
#define STR(x) #x << '=' << x int main() { int i = 1; std::string str("hello"); std::vector<std::string> vec; my_class mc; ... std::cout << STR(i) << std::endl << STR(str) << std::endl << STR(vec) << std::endl << STR(mc) << std::endl; return 0; }
Thus, the compiler chooses a streaming operator based on the data type, so you do not need to worry about different macros for each, and it can go to any std :: ostream, not just std :: cout. Just provide the appropriate data streaming operator:
std::ostream operator<<(std::ostream&, const T&); std::ostream operator<<(std::ostream&, const std::vector<T>&); etc
But I would like for there to be a templated way to replace the macro, or at least the variable name provided by #x.
source share