chapter 8: input and output stream iterators
chapter 8: define template function, and pass it to a function parameter

I have to define the template function split in its header file.

A template function can be used as a argument of a function that
requires a function parameter (or, as the default parameter value), as
long as that function parameter has type that could be instantiated by
the template function. For example, the xref function defines its second
parameter as:
void find_items(const string&, back_insert_iterator<vector<string> >)
, and you can pass split function to this parameter