boost::proto::deduce_domain — 一个伪域,用于需要域参数的函数和元函数。它表明父节点的域应从子节点的域中推断出来。
// In header: <boost/proto/domain.hpp> struct deduce_domain { };
当 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
更弱。proto::default_domain
或 proto::basic_default_domain
的个体集合 SN 的交集。proto::default_domain
或 proto::basic_default_domain
的个体集合 SN 的交集。proto::default_domain
或 proto::basic_default_domain
,并且 U 包含一个不是 proto::default_domain
或 proto::basic_default_domain
的元素,则这是一个错误。
注意:上述描述听起来在编译时计算成本很高。实际上,这一切都可以通过 C++ 函数重载来完成。