KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I want to define a macro that can be invoked in different places (at file scope) in order to create functions that do something. (In the example below the functions just print a message, but of course my real intent is to do some other useful stuff.) The challenge is that I want some "manager" function (in my example it will just be main() ) to somehow succeed in getting them all invoked (in any order) without any of the code being dependent on the macro invocations (except for the macro invocations themselves, of course). What I mean is that once the file is written, another programmer would be able to just insert a few new macro invocations at various places or delete some of the existing invocations, and the code would still work without any further change. I realize this can be done using static objects but I want to explore a different approach. I'm going to use some template trickery and the fact that __LINE__ is monotone increasing. #include <iostream> using namespace std; template<int i> inline void f() { f<i-1>(); } #define START_REGISTRATION \ template<> \ inline void f<__LINE__>() {} /* stop the recursion */ \ template<> void f<__LINE__>() /* force semicolon */ #define REGISTER(msg) \ template<> \ inline void f<__LINE__>() \ { \ cout << #msg << endl; \ f<__LINE__ - 1>(); \ } \ template<> void f<__LINE__>() /* force semicolon */ // Unrelated code ... START_REGISTRATION; // Unrelated code ... REGISTER(message 1); // Unrelated code ... R
Tags (comma-separated)
Save Edits
Cancel