25 template <
typename member_t>
27 const char* name =
nullptr;
42 template <
typename member_t>
57 template <
typename member_t>
75 template <
typename expression_t,
typename member_t>
93 constexpr member_expression(expression_t expression, member_t member) : expression {std::move(expression)}, member {std::move(member)} {}
103 auto&& obj = expression(std::forward<
decltype(
args)>(
args)...);
104 if constexpr (std::is_pointer_v<std::decay_t<
decltype(obj)>>)
return (obj->*member.member);
105 else return (obj.*member.member);
113 [[no_unique_address]] expression_t expression;
114 [[no_unique_address]] member_t member;
151 template <
typename expression_t,
typename member_t>
189 template <
typename expression_t,
typename member_t>
190 requires expression_operand<expression_t> || expression_operand<member_type<member_t>>
192 return std::forward<expression_t>(
expression) * std::forward<member_type<member_t>>(
member);
Contains xtd::expressions::as_expression methods.
The xtd::expressions::expression_operand object is expression operand concept.
Definition expression_operand.hpp:27
Contains xtd::expressions::expression_operand concept.
Contains xtd::expressions::expression_stream struct.
operator_precedence
Specifies the operator precedence.
Definition operator_precedence.hpp:22
constexpr auto operator|(expression_t expression, member_type< member_t > member)
Bind member operator.
Definition member_expression.hpp:191
constexpr decltype(auto) as_expression(type_t &&value)
The xtd::expressions::as_expression method convert a type as xtd::expressions::expression.
Definition as_expression.hpp:33
constexpr auto member(member_t member)
The xtd::expressions::member is use to bind object member.
Definition member_expression.hpp:43
constexpr auto operator*(expression_t expression, member_type< member_t > member)
Bind member operator.
Definition member_expression.hpp:153
constexpr auto operator<<(left_t left, right_t right)
Subtract the specified left and right operands.
Definition left_shift_expression.hpp:127
constexpr auto args()
Generates a set of positional placeholders that can be decomposed using structured bindings to build ...
Definition args.hpp:43
@ member_access
Represnets the member access operator precedence (a.b a->b).
Definition operator_precedence.hpp:44
@ e
The E key.
Definition console_key.hpp:96
The xtd::expressions namespace provides a lightweight, composable expression template framework for b...
Definition add_expression.hpp:14
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
The xtd::expressions::expression_stream is the streamable class for expression objects.
Definition expression_stream.hpp:23
Provides the base class from which the classes that represent expression tree nodes are derived....
Definition expression.hpp:107
The xtd::expressions::as_expression method convert a type as xtd::expressions::expression or xtd::exp...
Definition member_expression.hpp:76
constexpr member_expression()=default
Initialize a new xtd::expressions::member_expression object.
constexpr member_expression(expression_t expression, member_t member)
Initialize a new xtd::expressions::add_expression object with specified expression and member operand...
Definition member_expression.hpp:93
constexpr decltype(auto) operator()(auto &&... args) const
Add the specified arguments.
Definition member_expression.hpp:102
static constexpr operator_precedence precedence
The operator precedence. That contains one of xtd::expressions::operator_precedence values.
Definition member_expression.hpp:81
The xtd::expressions::member_type contains the member type.
Definition member_expression.hpp:26