作者kevingwn (如雲如風的人生)
看板C_and_CPP
標題[問題] 巨集的報錯,not declared in this scope
時間Sun Nov 18 15:22:34 2012
請各位先看下面這段程式碼
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:換個名子就行了 11/19 20:27
→ kevingwn:是因為不能重複用在macro裡嗎!? 11/20 19:52