Терминалы используются в Фениксе для прозрачной обработки специальных значений. Например, поскольку Феникс улавливает все по значению, нам нужно было использовать<boost::reference_wrapper>для приведения эталонной семантики в Феникс.
Пользовательские терминалы могут быть любого класса обертки:
template <typename T>
struct is_custom_terminal;
Нужно специализироваться, чтобы Феникс распознал этот тип обертки.<default_action>Призыв<custom_terminal<T>>.
Пример:
template<typename T>
struct is_custom_terminal<boost::reference_wrapper<T> >
: mpl::true_
{};
template<typename T>
struct custom_terminal<boost::reference_wrapper<T> >
{
typedef T &result_type;
template <typename Context>
T &operator()(boost::reference_wrapper<T> r, Context &) const
{
return r;
}
};