私はネットワークパケットを処理するための小さなアプリケーションを作成しようとしています。テストを容易にするために、このアプリがローカルストリーミングモード(std::cin
を使用)とネットワークストリーミングモード(asioを使用)の2つのモードで動作できることを願っています。さまざまな種類のストリームを処理する汎用関数を作成するにはどうすればよいですか?
event_stream >> MsgHeader;
:目標は、それが透明パケットの実際の解析を行うクライアントクラス(ES)の残りの部分に、例えば、彼らはストリームへの参照をつかむことができ作るevent_stream
、その後、として解析するんですクラスMsgHeader
には、オーバーロード演算子>>があると仮定します。
ローカルストリームモードの場合:私はちょうど&cin
を返します。
boost::asio::io_service io_s;
tcp::acceptor acc(io_s. tcp::endpoint(tcp::v4(), 1950));
tcp::iostream stream;
acc.accept(*stream.rdbuf()); // act as server, another client will write to it.
return &stream;
しかし、私は、彼らが対処しているどのようなストリームのクライアントの残りの部分は「気づかない」ようにする方法を少し失われています:ネットワークモードの場合、私はこのような何かを行うことができることを望みますか?
std::istream &in = get_event_stream();
参考文献は、多型をサポートそれらを明示的に使用する必要はありません。 – Jason