#include <boost/phoenix/core/reference.hpp>
Значения являются неизменными константами. Попытка изменить значение приведет к ошибке компиляции времени. Когда мы хотим, чтобы функция изменила параметр, мы используем ссылку. Например, представьте себе ленивую функцию<add_assign
>:
void add_assign(T& x, T y) { x += y; }
Здесь мы хотим, чтобы первый аргумент функции x был изменчивым. Очевидно, мы не можем написать:
add_assign(1, 2)
В C++ мы можем передать ссылку на переменную в качестве первого аргумента в нашем примере выше. Тем не менее, по умолчанию, библиотека заставляет аргументы, переданные частично прикладным функциям, быть неизменными значениями (см.Значения). Для достижения своих целей мы используем:
expression::reference<T>::type
Это похоже на<expression::value<T>::type
>ранее, но вместо этого имеет ссылку на переменную.
Обычно мы не ставим<expression::reference<T>::type
>непосредственно. Вместо этого мы используем:
ref(v)
Например (где<i
>является<int
>переменной):
add_assign(ref(i), 2)
Ссылки - это актеры. Следовательно, ссылки можно оценить. Такое обращение указывает на личность ссылки. Пример:
int i = 3;
char const* s = "Hello World";
cout << ref(i)() << ref(s)();
Оригинальное название: 3 Hello World
Еще одна свободная функция
cref(cv)
Также может использоваться.<cref(cv)
>создает<expression::reference<Tconst>::type
>объект. Это похоже на<expression::value<T>::type
>, но когда данные, которые должны быть переданы в качестве аргумента для функции, являются тяжелыми и дорогими для копирования по стоимости,<cref(cv)
>предлагает более легкую альтернативу.