Struct deduce_domain
boost::proto::deduce_domain — A pseudo-domain for use in functions and metafunctions that require a domain parameter.
It indicates that the domain of the parent node should be inferred from the domains of the child nodes.
Synopsis
Description
Когда<proto::deduce_domain
>используется в качестве домена — либо явно, либо косвенно<proto::make_expr()
>,<proto::unpack_expr()
>, либо оператор Proto перегружает — Proto будет использовать домены детских выражений для вычисления домена родителя. Это делается таким образом, что (A) выражения в доменах, которые разделяют общий супердомен, являются взаимодействующими, и (B) выражения, которые находятся в домене по умолчанию (или его поддомене), совместимы свсемивыражениями. Правила следующие:
- сильнее, чем его супердомен.
- <
proto::default_domain
>,<proto::basic_default_domain
>и все их поддоменыслабее, чем все другие домены.
- <
proto::basic_default_domain
>слабее<proto::default_domain
>.
- Для каждого ребенка определите набор доменовSN, который включает в себя домен ребенка и все его супердомены.
- Определить наборIS, который является пересечением всех индивидуальных множествSN, которые не содержат<
proto::default_domain
>или<proto::basic_default_domain
>.
- Определите наборIW, который является пересечением всех индивидуальных наборовSN, которые содержат<
proto::default_domain
>или<proto::basic_default_domain
>.
- Определите наборP, который является союзомISиIW.
- Общий домен является самым сильным доменом в набореPсо следующими оговорками.
- ПустьUбудет объединением всех множествSN. Если результат<
proto::default_domain
>или<proto::basic_default_domain
>иUсодержит элемент, которыйне<proto::default_domain
>или<proto::basic_default_domain
>, то это ошибка.
Примечание: вышеприведенное описание звучит так, как будто было бы дорого вычислять во время компиляции. На самом деле, все это можно сделать с помощью перегрузки функций C++.