[問題] 巨集的報錯,not declared in this scope

看板C_and_CPP (C/C++)作者 (如雲如風的人生)時間13年前 (2012/11/18 15:22), 編輯推噓1(109)
留言10則, 4人參與, 最新討論串1/1
請各位先看下面這段程式碼 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

11/18 15:57, , 1F
未看先猜踩到 ##
11/18 15:57, 1F

11/18 17:32, , 2F
好像不是,直接寫PP_REPEAT_FROM_1_TO_5(MAX_ENU...也不行
11/18 17:32, 2F

11/19 05:34, , 3F
你可以嘗試先用preprocessor展開來檢視一下生出的程式
11/19 05:34, 3F

11/19 05:35, , 4F
像是gcc -E
11/19 05:35, 4F

11/19 05:38, , 5F
我可以成功編譯呀... 用g++
11/19 05:38, 5F

11/19 05:59, , 6F
相依性讓他斷掉了..你可以試試看nest/recursive include
11/19 05:59, 6F

11/19 19:41, , 7F
用vc9一樣不行,來研究Boost Preprocessor好了orz
11/19 19:41, 7F

11/19 20:27, , 8F

11/19 20:27, , 9F
換個名子就行了
11/19 20:27, 9F

11/20 19:52, , 10F
是因為不能重複用在macro裡嗎!?
11/20 19:52, 10F
文章代碼(AID): #1Gg8ozsl (C_and_CPP)
文章代碼(AID): #1Gg8ozsl (C_and_CPP)