我在boost::spirit
有一個自定義終端,我希望用戶能夠提供我的終端的第一個參數作爲lazy參數,其餘的作爲普通文字字符串。這可能使用use_lazy_terminal
例如,如果在我的專業化使用:我可以使用use_lazy_terminal來獲取獲取3個參數的終端的第一個參數嗎?
template<>
struct use_lazy_terminal<qi::domain, my_custom_tag, 1 /*only first parameter*/>
: mpl::true_ {};
@sehe這麼多感謝您的回答,我在這個問題上的關注是不是性能,我知道,編譯器將優化和...。讓我解釋爲什麼我創建我的自定義終端:
正如你所知道的編譯qi
語法真的很慢,找到錯誤的來源真的很難(與簡單使用qi
本身相比),所以我決定寫一個定製終端,得到這個:debug_position(debug_callback, rule_name, msg)
。因此,我可以將自定義消息從我的規則發送到自定義調試器,因爲您看到它非常簡單,我可以在語義操作的幫助下執行此操作,但是使用此技術並將其與在發佈模式下無法擴展的宏結合使用可以簡單地編寫我的語法並調試我想要的任何語法。但是因爲我的消息和規則名稱是不變的,所以我將它們存儲爲const char*
而不是std::string
或類似的東西,所以我認爲有可能從函數提供的第一個參數但其餘的被強制爲文字?我可以在use_terminal
的專門化中使用const char (&) [N]
來強制用戶使用字符串文字。
正如你所見,我可以沒有這種生活,但我真的想知道,我能做到這一點在精神?
我的源代碼是:http://pastebin.com/275S6Czu
我真的很想看到這個小例子。這兩者都是因爲我以前沒有用Spirit做過定製終端,並且因爲它可以幫助我看到你的擔憂在哪裏。 – sehe
發現你的示例:適合我的工作:http://liveworkspace.org/code/a43775e74e34c3e1495aa3f907bf5040(消除MSVC錯誤後)。你想要什麼_altered_?我會用一些更正統的方法來更新我的答案來調試語法。 – sehe
@sehe我的示例已經在工作,我已經在使用它來調試我的'rules'和'grammars',但是我想知道是否有任何方法可以從全局函數中獲取我的調試器實例並強制用戶提供2個其他參數作爲字符串字面?正如你在我的示例中看到的,我的調試器將它們捕獲爲原始指針。我知道我可以改變它'字符串',但我很好奇,有沒有什麼辦法只有第一個參數變得懶惰,另外2個應該提供值? – BigBoss