BEGIN/ENDブロック
昔、AWKにあるBEGIN/ENDブロックが、C++でも使えたら便利かもしれないと思って、
マクロで作ったことを思い出す。
脳内から発掘したものをここに晒しておく。
#define CAT(X,Y) CAT2(X,Y) #define CAT2(X,Y) X##Y #define BEGIN \ static class CAT(Begin_class,__LINE__) \ { \ public: \ CAT(Begin_class,__LINE__)(); \ } CAT(Begin_class_object,__LINE__); \ CAT(Begin_class,__LINE__)::CAT(Begin_class,__LINE__)() #define END \ static class CAT(End_class,__LINE__) \ { \ public: \ ~CAT(End_class,__LINE__)(); \ } CAT(End_class_object,__LINE__); \ CAT(End_class,__LINE__)::~CAT(End_class,__LINE__)()
こう使う。
BEGIN { std::cout << "BEGIN" << std::endl; } END { std::cout << "END" << std::endl; } int main() { std::cout << "main" << std::endl; }
長い間、思い出さなかったということは、実用性がほとんどないのだろう。