C/C++ macro/template blackmagic to generate unique name

后端 未结 4 1527
孤城傲影
孤城傲影 2020-11-29 17:29

Macros are fine. Templates are fine. Pretty much whatever it works is fine.

The example is OpenGL; but the technique is C++ specific and relies on no knowledge of Op

4条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-11-29 18:08

    If your compiler supports __COUNTER__ (it probably does), you could try:

    // boiler-plate
    #define CONCATENATE_DETAIL(x, y) x##y
    #define CONCATENATE(x, y) CONCATENATE_DETAIL(x, y)
    #define MAKE_UNIQUE(x) CONCATENATE(x, __COUNTER__)
    
    // per-transform type
    #define GL_TRANSLATE_DETAIL(n, x, y, z) GlTranslate n(x, y, z)
    #define GL_TRANSLATE(x, y, z) GL_TRANSLATE_DETAIL(MAKE_UNIQUE(_trans_), x, y, z)
    

    For

    {
        GL_TRANSLATE(1.0, 0.0, 0.0);
    
        // becomes something like:
        GlTranslate _trans_1(1.0, 0.0, 0.0);
    
    } // auto popmatrix
    

提交回复
热议问题