看板 C_and_CPP 關於我們 聯絡資訊
請各位先看下面這段程式碼 http://ideone.com/jfT4Bv 自己實作了一個簡陋的Boost Variant 目的是要搭配Variant max(...)這樣的函式作出 max(3, 5, 3.14f, 4.0).apply(Println()); // 輸出 int 5 這樣的寫法 但遭遇了一些小問題,我用preprocessor來產生max()和它的help function 請見251行和257行 我想寫成PP_REPEAT_FROM_1_TO(5,MAX_ENUM,PP_SPACE) 但是會出現 In function ‘Variant<T0, T1, T2, T3, T4, T5>& max_helper(Variant<... error: ‘FUNCTION_ARG’ was not declared in this scope error: ‘PP_COMMA’ was not declared in this scope ... 這樣的錯誤訊息 我試過把有問題的PP_REPEAT_FROM_1_TO(n,FUNCTION_ARG,PP_COMMA) 包成另一個macro還是不行 請問要怎麼改才能寫成方便的形式? btw,我有改成用variadic template來寫,簡潔很多 可是Variant最重要的switch case還是只能靠preprocessor產生 真是可惜 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.204.92.148
loveme00835:未看先猜踩到 ## 11/18 15:57
kevingwn:好像不是,直接寫PP_REPEAT_FROM_1_TO_5(MAX_ENU...也不行 11/18 17:32
sunneo:你可以嘗試先用preprocessor展開來檢視一下生出的程式 11/19 05:34
sunneo:像是gcc -E 11/19 05:35
sunneo:我可以成功編譯呀... 用g++ 11/19 05:38
sunneo:相依性讓他斷掉了..你可以試試看nest/recursive include 11/19 05:59
kevingwn:用vc9一樣不行,來研究Boost Preprocessor好了orz 11/19 19:41
linotwo:http://ideone.com/vP6Wbf 11/19 20:27
linotwo:換個名子就行了 11/19 20:27
kevingwn:是因為不能重複用在macro裡嗎!? 11/20 19:52