Template Template Parameters and overload problems
Dear readers:
I met a problem and can't solve for a long time so any advices and
suggestions will be appreciated.
#include <iostream>
#include <string>
#include <set>
#include <map>
using namespace std;
template <typename T>
void printall(T const& t)
{
typename T::const_iterator iter;
iter= t.begin();
while(iter != t.end()) {
printone(*iter);
++iter;
}
std::cout << typeid(t).name() << std::endl;
return;
}
template <typename T, typename T1, template<typename T, typename T1>
class CONT >
void printone(const CONT<const T, T1> &t)
{
std::cout << t.first /*<< " " << t.second */<< std::endl;
return;
}
std::ostream& operator<< (std::ostream & out, std::set<int> & si)
{
std::set<int>::iterator iter=si.begin();
while(iter != si.end()) {
out << *iter << " ";
++iter;
}
return out;
}
int main(void) {
int di[] = {1, 3, 5, 7};
set<int> ti(di, di+4);
cout << ti << endl;
map<string, set<int> > maps;
maps["hello"] = ti;
printall(maps);
map<string, set<int> >::iterator iter = maps.begin();
cout << (*iter).first << " " << (*iter).second << endl;
return 0;
}
if I open the comment on line 22
std::cout << t.first /*<< " " << t.second */<< std::endl;
to
std::cout << t.first << " " << t.second << std::endl;
gcc will cry out
10.6.test.cpp:22: error: no match for 'operator<<' in 'std::operator<<
[with _Traits = std::char_traits<char>](((std::basic_ostream<char,
std::char_traits<char> >&)(+std::operator<< [with _CharT = char,
_Traits = std::char_traits<char>, _Alloc =
std::allocator<char>](((std::basic_ostream<char, std::char_traits<char>
&)(&std::cout)), ((const std::basic_string<char, std::char_traits<char>,
std::allocator<char> >&)((const std::string*)t))))), ((const char*)" ")) <<
t->std::pair<const std::string, std::set<int, std::less<int>,
std::allocator<int> > >::second'
thanks for your help.
andy
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]