4
我需要記錄(用於審計/日誌記錄的目的)在我的代碼中傳遞的lambda函數的代碼。當然,lambda對象也需要保存。所以,我想出了一個宏觀的解決方案如下:保留新行的C++預處理器字符串化?
#define LAMBDA_AND_STRING(lambda) lambda, #lambda
using namespace std;
int main(int argc, const char * argv[])
{
auto p = pair<function<void()>, string> (LAMBDA_AND_STRING([] {
cout << "Hello world!" << endl;
cout << "Hello again!";
}));
cout << "CODE:" << endl << p.second << endl << endl;
cout << "EXECUTION:" << endl;
p.first();
cout << endl;
}
此輸出:
CODE:
[] { cout << "Hello world!" << endl; cout << "Hello again!"; }
EXECUTION:
Hello world!
Hello again!
這幾乎是良好的,但是從拉姆達定義的換行符都走了(實際上我lambda表達式要長得多比在上面的典型例子中,所以爲了可讀性需要保持換行符)。任何想法如何保持他們? (C++ 11很好)。
謝謝!
使用';;'作爲行分隔符怎麼樣?沒有宏,更短,更清晰,對原始來源沒有影響。 –
@tehinternetsismadeofcatz:它不會影響這個源,但它會影響例如一個調用具有多個詳細參數的算法,該算法已被分成多行。 –
這是一個很好的觀點。 –