summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/phoenix/example/lambda.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/phoenix/example/lambda.cpp')
-rw-r--r--src/boost/libs/phoenix/example/lambda.cpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/boost/libs/phoenix/example/lambda.cpp b/src/boost/libs/phoenix/example/lambda.cpp
new file mode 100644
index 00000000..adfd798e
--- /dev/null
+++ b/src/boost/libs/phoenix/example/lambda.cpp
@@ -0,0 +1,73 @@
+/*=============================================================================
+ Copyright (c) 2001-2007 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#include <iostream>
+#include <algorithm>
+#include <vector>
+
+#include <boost/phoenix/scope.hpp>
+#include <boost/phoenix/core.hpp>
+#include <boost/phoenix/operator.hpp>
+#include <boost/phoenix/function.hpp>
+
+namespace lazy_stuff
+{
+ using boost::phoenix::function;
+
+ struct for_each_impl
+ {
+ typedef void result_type;
+
+ template <typename C, typename F>
+ void operator()(C& c, F f) const
+ {
+ std::for_each(c.begin(), c.end(), f);
+ }
+ };
+
+ function<for_each_impl> const for_each = for_each_impl();
+
+ struct push_back_impl
+ {
+ typedef void result_type;
+
+ template <typename C, typename T>
+ void operator()(C& c, T& x) const
+ {
+ c.push_back(x);
+ }
+ };
+
+ function<push_back_impl> const push_back = push_back_impl();
+}
+
+int
+main()
+{
+ {
+ using lazy_stuff::for_each;
+ using lazy_stuff::push_back;
+
+ using boost::phoenix::lambda;
+ using boost::phoenix::arg_names::arg1;
+ using boost::phoenix::arg_names::arg2;
+ using boost::phoenix::local_names::_a;
+
+ int x = 10;
+ std::vector<std::vector<int> > v(10);
+
+ for_each(arg1,
+ lambda(_a = arg2)
+ [
+ push_back(arg1, _a)
+ ]
+ )
+ (v, x);
+ }
+
+ return 0;
+}
+