2
0
mirror of https://github.com/boostorg/yap.git synced 2026-02-22 16:02:10 +00:00
Files
yap/doc/other_snippets.cpp
2016-12-13 19:32:18 -06:00

69 lines
1.4 KiB
C++

#include <boost/yap/yap.hpp>
#include <iostream>
void foo ()
{
//[ assign_through_terminal
int i = 0;
auto expr = boost::yap::make_terminal(i) = 42;
evaluate(expr);
std::cout << i << "\n"; // Prints 42.
//]
}
//[ eval_plus_example_decls
namespace user {
struct number
{
double value;
};
number eval_plus (number lhs, number rhs)
{ return number{lhs.value + rhs.value}; }
}
//]
//[ transform_expression_example_decls
// A convenient alias; nothing to see here.
template <typename T>
using term = boost::yap::terminal<boost::yap::expression, T>;
namespace user {
auto transform_expression (decltype(term<number>{{0.0}} * number{}) const & expr)
{ return "Yay."; }
}
//]
int main ()
{
foo();
{
//[ eval_plus_example_use
auto plus_expr = boost::yap::make_terminal(user::number{2.0}) + user::number{1.0};
auto minus_expr = boost::yap::make_terminal(user::number{2.0}) - user::number{1.0};
user::number plus_result = evaluate(plus_expr);
std::cout << plus_result.value << "\n"; // Prints 1.
// Does not compile; there is no operator- defined over user::number.
//user::number minus_result = evaluate(minus_expr);
//]
}
{
//[ transform_expression_example_use
auto expr = term<user::number>{{1.0e6}} * user::number{1.0e6};
std::cout << evaluate(expr) << "\n"; // Prints "Yay." Wierd!
//]
}
return 0;
}