//: C06:ComposeTry.cpp // 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. // A first attempt at implementing function composition. #include #include #include #include #include using namespace std; template class unary_composer { F1 f1; F2 f2; public: unary_composer(F1 fone, F2 ftwo) : f1(fone), f2(ftwo) {} R operator()(E x) { return f1(f2(x)); } }; template unary_composer compose(F1 f1, F2 f2) { return unary_composer(f1, f2); } int main() { double x = compose( atof, mem_fun_ref(&string::c_str))("12.34"); assert(x == 12.34); } ///:~