我正在尝试写一个处理网络数据包的小应用程序。为了方便测试,我希望这个应用程序可以在两种模式下运行:本地流模式(使用std::cin)和网络流模式(使用asio) -例如,基于命令行是否提供端口号。这样做的目的是让对包进行实际解析的客户端类的其余部分透明,例如,他们可以获取对流的引用event_stream,然后进行如下解析:
event_stream >> MsgHeader;假设类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();发布于 2012-02-17 23:07:31
有两种可能性:
std::istream *in = &get_event_stream();
然后让你的函数接受一个指向基类(这里是std::istream)的指针,并且只使用基类拥有的函数:
void some_function( std::istream *in );https://stackoverflow.com/questions/9330500
复制相似问题