123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /*=============================================================================
- Copyright (c) 2017 Nikita Kniazev
- 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 <boost/phoenix/core.hpp>
- #include <boost/phoenix/object.hpp>
- #include <boost/phoenix/scope.hpp>
- #include <boost/phoenix/operator.hpp>
- #include <string>
- #include <iostream>
- template <typename T, std::size_t N>
- struct array_holder
- {
- typedef T underlying_type[N];
- array_holder(underlying_type const& x)
- {
- for (std::size_t i = 0; i < N; ++i) elems_[i] = x[i];
- }
- T elems_[N];
- friend std::ostream& operator<<(std::ostream& os, array_holder const& x)
- {
- os << x.elems_[0];
- for (std::size_t i = 1; i < N; ++i) os << ", " << x.elems_[i];
- return os;
- }
- };
- int main()
- {
- using boost::phoenix::construct;
- using boost::phoenix::let;
- using boost::phoenix::arg_names::_1;
- using boost::phoenix::local_names::_a;
- let(_a = construct<std::string>("str"))
- [
- std::cout << _a << std::endl
- ]();
- let(_a = construct<array_holder<char, 4> >("str"))
- [
- std::cout << _a << std::endl
- ]();
- int ints[] = { 1, 2, 3 };
- let(_a = construct<array_holder<int, sizeof(ints) / sizeof(ints[0])> >(ints) )
- [
- std::cout << _a << std::endl
- ]();
- return 0;
- }
|