我有這樣一個宏(它是從一個實際有用的用例來了,但我一直在用簡單的情況下打):功能綁定操作
#define MY_MACRO(M) M(3) M(5) M(7)
#define MULTIPLY_BY_2(A) (2*A)
然後我就可以寫
MY_MACRO(MULTIPLY_BY_2)
// -> (2*3) (2*5) (2*7)
酷!我想要的是:
#define MULTIPLY(A,B) (A*B)
MY_MACRO(BIND(MULTIPLY, 2))
獲得與上面相同的結果。 BIND可能是什麼?我嘗試了一些黑客,並可以報告這幾乎是可能的(我覺得很驚奇)。但它不漂亮,而且不是一般的。這可以做以及? (即純粹在CPP中建立一些真正的功能性設施?)它可以做得足夠好來綁定綁定宏嗎?
也許我真正要問的是在任何你知道的預處理庫中是否有像這樣的工具?在Boost中我沒有發現任何相似的東西。
嘗試對預處理器做太多的操作可能會使代碼成爲未來調試/理解的噩夢。 – 2012-04-20 23:04:49
Boost是基於Vesa Karvonen的工作,它顯然在預處理器中實現了一個完整的函數式語言,包括詞法環境,尾遞歸等。所以我對「在Boost中找不到這樣的東西」持懷疑態度。你確定?不過,不太可能在這種漂亮而簡單的部分應用語法下。 – Kaz 2012-04-20 23:06:01