Bruce Eckel's Thinking in C++, 2nd Ed | Contents | Prev | Next |
//: C19:TemplateTemplate.cpp #include <vector> #include <iostream> #include <string> using namespace std; // As long as things are simple, this approach // works fine: template<typename C> void print1(C& c) { typename C::iterator it; for(it = c.begin(); it != c.end(); it++) cout << *it << " "; cout << endl; } // Template-template argument must be a class; // cannot use typename: template<typename T, template<typename> class C> void print2(C<T>& c) { copy(c.begin(), c.end(), ostream_iterator<T>(cout, " ")); cout << endl; } int main() { vector<string> v(5, "Yow!"); print1(v); print2(v); } ///:~