c++ logging - how to write a conditional macro for insertion operator that does nothing -
i have piece of code uses plog logging, below:
int main(int argc, char** argv) { static plog::colorconsoleappender<plog::txtformatter> consoleappender; plog::init(plog::verbose, &consoleappender); // log severity levels printed in different colors. log_verbose << "this verbose message"; log_debug << "this debug message"; log_info << "this info message"; log_warning << "this warning message"; log_error << "this error message"; log_fatal << "this fatal message"; return 0; } as code going part of library, don't want emit logs until / unless enabled application using it. so, trying see, if can make above logging code ineffective via macro definitions. tried following, results in compilation errors:
#ifdef no_logging #undef log_verbose #define log_verbose {} #undef log_debug #define log_debug {} #undef log_info #define log_info {} #undef log_warning #define log_warning {} #undef log_error #define log_error {} #undef log_fatal #define log_fatal {} #endif this results in compilation error
log_test.cpp:25:15: error: expected expression log_verbose << "this verbose message" ; ^ log_test.cpp:26:13: error: expected expression log_debug << "this debug message"; ^ log_test.cpp:27:12: error: expected expression log_info << "this info message"; ^ log_test.cpp:28:15: error: expected expression log_warning << "this warning message"; ^ log_test.cpp:29:13: error: expected expression log_error << "this error message"; ^ log_test.cpp:30:13: error: expected expression log_fatal << "this fatal message"; ^ is there way around problem , have proper disabling of logs?
your best bet this:
struct black_hole_t { template <typename t> black_hole_t operator<<(t &&) { return {}; } }; black_hole_t black_hole; #define log_blah black_hole // or #define log_blah black_hole_t{} // gcc generates 1 more instruction @ -o0, // hurts inner love premature optimizations. and hope compiler optimize no-op.
gcc 7.2 no-ops -o1, clang 4.0 requires @ least -o2.
Comments
Post a Comment