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
>для второй перегрузки и ничего для первой.
См. также: