特定の関数を一度実行し、別の実装に切り替える必要があることがあります。ラムダ関数が独自の参照を取得して変更する
例えば、私はコピーアルゴリズムと一緒に印刷されている項目の後に区切り文字を出力ストリーム出力イテレータによって本当にイライラしています:
> 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*()>
宣言を取り除くと、何らかの形で効果的にラムダの自己キャプチャを伴うauto
でget_delim
を宣言する取得する方法はありますか? join
のように表現力豊かな(Pythonのような)別の方法があるかもしれませんか?この場合
コンマ区切りの出力に関する[この質問](https://stackoverflow.com/questions/3496982/printing-lists-with-commas-c)にはいくつか興味深いアイディアがあります。 –
あなたは使用できませんラムダ型は一意であるため(この変数に別のラムダを割り当てることはできません)、 'auto'です。しかしなぜラムダですか?それは素敵なトリッキーですが、同様のものを使った単純なループを使って必要な文字列を作成する単純な関数を書くこともできます。 – HolyBlackCat