
Dear all, I am trying to use the any class in a project. I would need to print elements of a vector<any>. I have come to the following solution as an example: template<class T> inline ostream& operator<<(ostream &os, const vector<T> &v) { vector<T>::const_iterator iter(v.begin()); for (int c(0), n(v.size()); c<n-1; c++) os << *iter++ << ','; return os << *iter; } typedef vector<bool> vectb; int main() { vector<any> values; double f(2.0); string s("hello"); int i(100); bool b(false); vectb vectbool; vectbool.push_back(true); vectbool.push_back(false); vectbool.push_back(true); vectbool.push_back(true); vectbool.push_back(false); vectbool.push_back(true); values.push_back(f); values.push_back(s); values.push_back(i); values.push_back(b); values.push_back(vectbool); for (vector<any>::iterator i(values.begin()), last(values.end()); i!=last; i++) { if (any_cast<bool>(i)) cout << *any_cast<bool>(i) << endl; else if (any_cast<int>(i)) cout << *any_cast<int>(i) << endl; else if (any_cast<float>(i)) cout << *any_cast<float>(i) << endl; else if (any_cast<double>(i)) cout << *any_cast<double>(i) << endl; else if (any_cast<string>(i)) cout << *any_cast<string>(i) << endl; else if (any_cast<vectb>(i)) cout << *any_cast<vectb>(i) << endl; } } But I would like a more general solution without to make assumptions about the type. Do you have any ideas? Another point is that I cannot figure out how to convert the solution below in terms of a friend ostream& operator<<(ostream &os, const any &rhs) I cannot get this compiled with g++ v 2.95 friend ostream& operator<<(ostream &os, const any &rhs) { return os << *any_cast<bool>(rhs); } Sincerely, Patrick ====================================================================== Patrick Guio Institute of Physics, University of Oslo P.O. box 1048, Blindern, N-0316 Oslo Tel : (+47) 22 84 40 60 - Fax : (+47) 22 85 56 71 E-mail : patrick.guio@fys.uio.no URL : http://folk.uio.no/~patricg