有時候需要執行一次特定函數並切換到另一個實現。lambda函數捕獲並修改自己的引用
例如,我通過印刷後的項與所述複製算法一起用於打印定界符流輸出迭代真惱火:
> 1,2,3,4,
^---- this is what happens in that case
問題是不是很好地打印的物品,但更關於正確連接它們。
例如Python的使用產生功能string.join
一個正確的結果:
','.join((1,2,3,4))
> 1,2,3,4
我也想避免if/else
聲明,因爲我們只需要一次,第一次執行後,使開關。所以我想出了,是:
std::function<char const*()> get_delim;
get_delim = [&get_delim]()
{
get_delim = [](){ return ","; };
return "";
};
for(auto b : some_byte_range)
std::cout << get_delim() << b;
注意:b
於我而言只是一個字節,這就是爲什麼我沒有用auto const&
。
現在的問題:
- 有擺脫之前
std::function<char const*()>
聲明並以某種方式宣佈get_delim
與auto
有效地涉及拉姆達自捕獲的方法嗎? - 是否可能有另一種更具表現力(如在Python中)的方式來做那種
join
?
我認爲[這個問題](https://stackoverflow.com/questions/3496982/printing-lists-with-commas-c)關於逗號分隔輸出有一些有趣的想法 –
你將無法使用'auto'因爲lambda類型是唯一的(你將不能爲這種變量賦予不同的lambda)。但爲什麼是lambda?這是一個很好的詭計,但你也可以寫一個簡單的函數,它使用一個帶有if或類似的簡單循環來構造所需的字符串。 – HolyBlackCat