C++ 用符号常量的名称连接

C++ 用符号常量的名称连接,c++,macros,concatenation,constants,stringify,C++,Macros,Concatenation,Constants,Stringify,我试图制作一个宏,将符号常量扩展为case语句,如下所示: // #define WM_PAINT 0x000F LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { BIND_MSG(WM_PAINT) // -> case WM_PAINT: Wnd_Main_WM_PAINT (hWnd, wParam, lPa

我试图制作一个宏,将符号常量扩展为case语句,如下所示:

// #define WM_PAINT 0x000F
LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch (msg) {
        BIND_MSG(WM_PAINT)
        // -> case WM_PAINT: Wnd_Main_WM_PAINT (hWnd, wParam, lParam); break;
    }

    return DefWindowProc(hWnd, msg, wParam, lParam);
}
我尝试了很多东西。我得到的最佳工作宏是:

#define BIND_MSG(msg) case (msg): Wnd_Main_##msg (hWnd, wParam, lParam); break;
但是这个宏并没有扩展到Wnd_Main_WM_PAINT,而是扩展到Wnd_Main_0x000F。当我尝试Wnd_Main_uumsg而不是Wnd_Main_umsg时,我得到的不是Wnd_Main_WM_PAINT,而是Wnd_Main_u。是否有可能将Wnd_Main_u与符号常量WM_PAINT的名称连接起来

Wnd_Main_0x000F>


对不起,截图是德语的。Visual Studio说,标识符Wnd_Main_0x000F没有定义。

。您的WM_画图是否像定义WM_画图0x000F一样定义?更重要的问题是,您为什么要开发难以维护的代码?是的,它就在链接中。我尽可能多地使用了你发布的代码。@chris:Coliru将其扩展为Wnd_Main_WM_PAINT,visualstudio扩展为Wnd_Main_0x000F