我最近遇到了一個問題,需要將用lambda表達式編寫的C++ 11代碼集成到僅支持C++ 98編譯器的舊代碼庫中。我想出了一些可能的lambda類似宏,函數或函數指針等等。但看起來他們都是有限的翻譯lambda與捕獲。例如調用一個簡單的通用功能回到:可以將Lambda表達式降級爲C++ 98
template <class Fn>
void ForEachObject(Fn fn)
{
for (uint i = 0; i < objectCount; i++)
{
fn(i, address + i * objectSize);
}
}
,典型的調用者會做一些這樣的:
uint attributes = 0x0030;
....
ForEachObject([=](uint index, void * objectAddress)
{
if ((ObjectInfo(index) & attributes) != 0)
{
fn(index, objectAddress);
}
});
注意這裏的屬性爲來自出來的λ的範圍。無論如何仍然重用沒有lambda的每個邏輯?或者我必須重新編寫每個這樣的調用者的邏輯?
我不太明白你在做什麼。你只在這裏捕獲一個'uint'。您可以添加參數並使功能獨立。你想要重用什麼邏輯,如果你改變參數類型,裏面的邏輯也會改變。 – luk32
你可以使用Boost嗎? – milleniumbug
這是一個簡單的示例調用者,不同的調用者會將不同的局部變量傳遞到lambda範圍。在這種情況下,唯一的方法是爲lambda部分編寫獨立函數,並將這些捕獲作爲參數傳遞。對?我是lambda新手。所以只是想要如果有更好的方法來做到這一點。 – bin3377