継続が使えるようになることでうれしいのは、やはり非同期処理のコールバック地獄の解消です。 非同期処理は、処理が終わった時に呼ばれるコールバック関数を登録しますが、連続的な非同期処理をしようと思ったら非常に多くの関数を行ったり来たりして書かないといけません。ラムダ式を使うとネストの深い関数をどんどん定義していくことになるので、状況はさらに悪化します。 継続を使うとこれを解消することができます。 以下のプログラムは、Boost.ContextのサンプルにあるcontinuationクラスをBoost.Asioと組み合わせて非同期処理をその場で書き下しています。 #include <iostream> #include <boost/asio.hpp> #include "continuation.hpp" namespace asio = boost::asio; class Client {