37 template <
class FwdIter>
class joiner {
38 friend std::ostream& operator<<(std::ostream& out,
const joiner& j) {
44 explicit joiner(
const std::string& separator, FwdIter start, FwdIter finish)
45 : m_sep(separator), m_start(start), m_finish(finish)
51 FwdIter m_start, m_finish;
53 void write(std::ostream& out)
const {
54 if (m_start == m_finish)
78 template <
class FwdIter>
80 join(
const std::string& delim, FwdIter start, FwdIter finish) {
85 template <
class Container>
86 joiner<typename Container::const_iterator>
87 join(
const std::string& delim, Container seq) {
88 typedef typename Container::const_iterator FwdIter;
89 return joiner<FwdIter>(delim, seq.begin(), seq.end());