我想为库中的 std::string 容器提供基于通用行的 IO。基于行,因为字符串可能包含空格。以下代码似乎工作正常,但我不确定这是否是最好的方法,或者它是否会产生一些歧义,我无法掌握。
#define boostForeach BOOST_FOREACH
template< template<typename ELEM, typename ALLOC=std::allocator<ELEM> > class Container >
std::ostream& operator<< (std::ostream& o, Container<std::string>const & container){
boostForeach(std::string const& str, container) {
o << str << "\n";
}
return o;
}
template< template<typename ELEM, typename ALLOC=std::allocator<ELEM> > class Container >
std::istream& operator>> (std::istream& in, Container<std::string>& container){
container.clear();
std::string buf;
while(getline(in, buf)) {
if(buf.empty()) break; //stop if empty line found to separate map from other data
container.insert(container.end(),buf);
}
return in;
}
所以问题是:这安全可靠吗?