Function operator,
boost::proto::operator, —
For composing a larger transform environment from two smaller ones.
Synopsis
template<typename Env, typename Key, typename Value>
proto::env<Key, Value, UNCVREF(typename proto::result_of::as_env<Env &>::type)>
operator,(Env & other, proto::env<Key, Value> const & head);
template<typename Env, typename Key, typename Value>
proto::env<Key, Value, UNCVREF(typename proto::result_of::as_env<Env const &>::type)>
operator,(Env const & other, proto::env<Key, Value> const & head);
Description
Эффект этой функции заключается в том, чтобы взять две среды преобразования и составить их в большую среду, которая содержит пары ключей / значений двух. Первый аргумент не может быть трансформирующей средой, и в этом случае он превращается в среду с функцией<proto::as_env()>перед композицией со вторым аргументом. Второй аргумент должен быть трансформирующей средой с точно одной парой ключ/значение.
Пример:
При наличии ключей, определенных пользователем<key0>и<key1>типов<key0_type>и<key1_type>, нижеследующий код показывает, как при использовании цепей<operator,>можно построить композитную среду преобразования, содержащую ряд пар ключ/значение:
proto::env<
key1_type
, int
, proto::env<
key0_type
, char const (&)[6]
, proto::env<proto::data_type, int>
>
> myenv = (proto::data = 1, key0 = "hello", key1 = 42);
// NOTE: operator, here --^ and here --^
// Check the results:
assert(1 == myenv[proto::data]);
assert(0 == std::strcmp(myenv[key0], "hello"));
assert(42 == myenv[key1]);
Примечание:В пункте «Возврат»<UNCVREF>(X)тип<X>лишен ссылки верхнего уровня и квалификаторов cv.
Примечание:В пункте «Возврат»<cv>заменяется на<const>для второй перегрузки и ничего для первой.
См. также: