2008-12-08 72 views
4

我正和一些領域特定語言的設計在C/C++,當我想到了這個「奇怪」的解決方案一個新的項目鬼混:C/C++中的域特定語言,這個猶太教嗎?

define DSL(...) MakeCommand(#__VA_ARGS__\ 
          )->Exec()->GetResults() 

MyResults results = DSL(for p in people do something); 

的好處是,這是由標準正確的(但Duff Switch也是如此),以及跨平臺,便攜式等等。然而,這種方法並不比將字符串寫入代碼更好,但由於DSL引擎總是對字符串進行解析,因此它看起來看起來更漂亮,並且減少混亂。但是想知道其他人怎麼看待它。

感謝

回答

6

嗯,而複雜的宏是C99,他們不可能在C++。我不會那樣做:)一個簡單的dsl函數採用std::string或者你的框架使用的任何字符串類,並且返回MakeCommand(str)->Exec()->GetResults()將是我的首選選項,因爲它對調試更友好,並且可以將它放入命名空間。

您還可以動態構建命令字符串並將其傳遞給函數。使用您的宏觀方法,傳遞str變量實際上會將"str"傳遞給MakeCommand函數。你需要另一個宏來獲得動態命令,以使其工作,這讓我感到不舒服。

+0

+1爲命名空間部分,這是相當大的一點,我沒有通過 – 2008-12-08 03:54:32