//: C06:ComposeFinal.cpp {-edg} // From "Thinking in C++, Volume 2", by Bruce Eckel & Chuck Allison. // (c) 1995-2004 MindView, Inc. All Rights Reserved. // See source code use permissions stated in the file 'License.txt', // distributed with the code package available at www.MindView.net. // An adaptable composer. #include #include #include #include #include #include #include #include #include "NumStringGen.h" using namespace std; template class unary_composer : public unary_function { F1 f1; F2 f2; public: unary_composer(F1 f1, F2 f2) : f1(f1), f2(f2) {} typename F1::result_type operator()(typename F2::argument_type x) { return f1(f2(x)); } }; template unary_composer compose(F1 f1, F2 f2) { return unary_composer(f1, f2); } int main() { const int SZ = 9; vector vs(SZ); // Fill it with random number strings: generate(vs.begin(), vs.end(), NumStringGen()); copy(vs.begin(), vs.end(), ostream_iterator(cout, "\t")); cout << endl; vector vd; transform(vs.begin(), vs.end(), back_inserter(vd), compose(ptr_fun(atof), mem_fun_ref(&string::c_str))); copy(vd.begin(), vd.end(), ostream_iterator(cout, "\t")); cout << endl; } ///:~