c++ - Define a static integer in a header with default value -
how can define integer in header file each cpp file includes header have static const int id=0
while giving ability cpps redefine other value.
i tried used weak symbol couldn't make work.
here's solution uses static variables:
// log.h #ifndef log_h #define log_h #include <iostream> #define setlogid(v) static logidsetter _logidsetter(_logid, v); #define log(v) std::cout << "id: " << _logid << ": " << (v) << std::endl; class logidsetter { public: logidsetter(int &id, int val) { id = val; } }; static int _logid = 0; #endif
// myclass.h class myclass { public: myclass(); void run(void); };
// myclass.cpp #include "log.h" #include "myclass.h" setlogid(42) myclass::myclass() { log("myclass::cons"); } void myclass::run(void) { log("myclass::run"); }
// main.cpp #include "myclass.h" #include "log.h" setlogid(1) int main() { myclass mc; log("here's main"); mc.run(); }
the log header defines static int _logid
, provides macro setlogid
, class idsetter
. cpp file may use setlogid
redefine static value. done instantiation of class idsetter
along address of _logid
, desired value. trick allows bypass c++'s one definition rule.
the output looks like:
id: 42: myclass::cons id: 1: here's main id: 42: myclass::run
Comments
Post a Comment