函数 apply_visitor
boost::apply_visitor —
将给定的访问者应用到给定的 variant 的内容上,该过程在编译期进行类型安全检查,以确认所有类型均被访问者所处理。
摘要
template<typename Visitor, typename Variant> typename Visitor::result_type apply_visitor(Visitor & visitor, Variant & operand); template<typename Visitor, typename Variant> typename Visitor::result_type apply_visitor(const Visitor & visitor, Variant & operand); template<typename BinaryVisitor, typename Variant1, typename Variant2> typename BinaryVisitor::result_type apply_visitor(BinaryVisitor & visitor, Variant1 & operand1, Variant2 & operand2); template<typename BinaryVisitor, typename Variant1, typename Variant2> typename BinaryVisitor::result_type apply_visitor(const BinaryVisitor & visitor, Variant1 & operand1, Variant2 & operand2); template<typename Visitor> apply_visitor_delayed_t<Visitor> apply_visitor(Visitor & visitor);
说明
apply_visitor
的行为取决于它所操作的参数的数量(即除访问者以外的其它参数)。该函数的行为如下:
- 接受一个操作数的重载将以给定的
variant
操作数的内容调用给定的访问者的单参函数调用操作符。 - 接受两个操作数的重载将以给定的
variant
操作数的内容调用给定的访问者的二元函数调用操作符。 - 只接受一个访问者的重载将返回一个
泛型函数对象
,该对象接受一个或两个参数并以这些参数和visitor
调用apply_visitor
, 其行为和前面两项相似。(这种行为特别有用,例如当你需要对一个 variant 对象序列中的各个元素使用一个标准库算法时)。
返回: | 接受操作数的重载将返回将给定访问者应用于给定操作数所得的结果。只接受一个访问者的重载则返回一个函数对象,以延后将访问者应用于任意操作数。 |
要求: | 给定的访问者必须符合 StaticVisitor 概念的要求,并处理给定 variant 的各个有界类型。 |
抛出: | 接受操作数的重载只会在给定的访问者抛出异常时抛出。只接受一个访问者的重载则不会抛出。(但是请注意,返回的 函数对象 有可能在运行时抛出) |