2016-03-16 18 views
1

我正在研究一個使用SFML的遊戲,通過一些教程,當我碰到一行代碼,我從來沒有場景。完整的東西在SFML Game Development,但具體的符號是[=],這裏是代碼的簡化形式。不熟悉的符號[=]在C++

template <typename data_type, typename Function> 
std::function<void(data_type1&)> foo(Function x) 
{ 
    return [=] (data_type1 y) 
    { 
     DoSomething(y); 
    }; 
} 

我覺得我得到的代碼點,但什麼是括號周圍等號的意義是什麼?我沒有在任何網站上發現它,除非我只使用了不好的搜索條件。

+3

查找有關_lambda表達式_。 –

+0

看看這個: http://en.cppreference.com/w/cpp/language/lambda – KABoissonneault

回答

4

方括號表示lambda函數的捕獲條件。如果您將=放入其中,則表示自動捕獲(按值)lambda中使用的所有符號。捕獲意味着這些變量可用於lambda中,而不是函數參數。

比方說,您正在使用在lambda內傳入foo的變量x。然後,x的值將自動在lambda中捕獲,並可通過相同的名稱訪問。更明確的方式將表明x將被捕獲:

[x] (data_type1 y) 
{ 
    DoSomethingElse(x, y); 
}; 

在你的情況下,它不會有任何影響,因爲沒有這樣的符號。更可能的是,這是一個馬虎的編程習慣,已經被編寫者所採用。或者有時需要它,這是一個複製粘貼宿醉。

我應該補充說明,如果fooDoSomething實際上是類中的方法,那麼可以使用它。在這種情況下,=會自動捕獲this,並解析爲正確呼叫DoSomething

+0

完美。搜索引擎的工作方式和刪除字符,所以它甚至不會讓我在這個網站上搜索,但已經有人將它標記爲重複的問題。 – thebigreddude