📄 base.h
字号:
typedef T_type result_type; // all operator() overloads return T_type. typedef lambda<T_type> lambda_type; result_type operator()() const; template <class T_arg1> result_type operator ()(T_arg1 _A_1) const { return value_; } #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD template <class T_arg1> result_type sun_forte_workaround(T_arg1 _A_1) const { return value_; } #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD template <class T_arg1,class T_arg2> result_type operator ()(T_arg1 _A_1,T_arg2 _A_2) const { return value_; } #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD template <class T_arg1,class T_arg2> result_type sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2) const { return value_; } #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD template <class T_arg1,class T_arg2,class T_arg3> result_type operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const { return value_; } #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD template <class T_arg1,class T_arg2,class T_arg3> result_type sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const { return value_; } #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> result_type operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const { return value_; } #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> result_type sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const { return value_; } #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> result_type operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return value_; } #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> result_type sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return value_; } #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> result_type operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return value_; } #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> result_type sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return value_; } #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> result_type operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return value_; } #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> result_type sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return value_; } #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD explicit lambda_core(typename type_trait<T_type>::take v) : value_(v) {} T_type value_;};template <class T_type>typename lambda_core<T_type, false>::result_type lambda_core<T_type, false>::operator()() const { return value_; }} /* namespace internal */template <class T_action, class T_functor, bool I_islambda>void visit_each(const T_action& _A_action, const internal::lambda_core<T_functor, I_islambda>& _A_target){ visit_each(_A_action, _A_target.value_);}// forward declarations for lambda operators other<subscript> and other<assign>template <class T_type>struct other;struct subscript;struct assign;template <class T_action, class T_type1, class T_type2>struct lambda_operator;template <class T_type>struct unwrap_lambda_type;/** Lambda type. * Objects of this type store a value that may be of type lambda itself. * In this case, operator()() executes the lambda (a lambda is always a functor at the same time). * Otherwise, operator()() simply returns the stored value. * The assign and subscript operators are defined to return a lambda operator. * * @ingroup lambdas */template <class T_type>struct lambda : public internal::lambda_core<T_type>{ typedef lambda<T_type> self; lambda() {} lambda(typename type_trait<T_type>::take v) : internal::lambda_core<T_type>(v) {} // operators for other<subscript> template <class T_arg> lambda<lambda_operator<other<subscript>, self, typename unwrap_lambda_type<T_arg>::type> > operator [] (const T_arg& a) const { typedef lambda_operator<other<subscript>, self, typename unwrap_lambda_type<T_arg>::type> lambda_operator_type; return lambda<lambda_operator_type>(lambda_operator_type(this->value_, unwrap_lambda_value(a))); } // operators for other<assign> template <class T_arg> lambda<lambda_operator<other<assign>, self, typename unwrap_lambda_type<T_arg>::type> > operator = (const T_arg& a) const { typedef lambda_operator<other<assign>, self, typename unwrap_lambda_type<T_arg>::type> lambda_operator_type; return lambda<lambda_operator_type>(lambda_operator_type(this->value_, unwrap_lambda_value(a))); }};template <class T_action, class T_type>void visit_each(const T_action& _A_action, const lambda<T_type>& _A_target){ visit_each(_A_action, _A_target.value_);}/// Converts a reference into a lambda object.template <class T_type>lambda<T_type&> var(T_type& v){ return lambda<T_type&>(v); }/// Converts a constant reference into a lambda object.template <class T_type>lambda<const T_type&> var(const T_type& v){ return lambda<const T_type&>(v); }/** Deduces the type of the object stored in an object of the passed lambda type. * If the type passed as template argument is no lambda type, * type is defined to unwrap_reference<T_type>::type. */template <class T_type>struct unwrap_lambda_type{ typedef typename unwrap_reference<T_type>::type type; };template <class T_type>struct unwrap_lambda_type<lambda<T_type> >{ typedef T_type type; };/** Gets the object stored inside a lambda object. * Returns the object passed as argument if it is not of type lambda. */template <class T_type>T_type& unwrap_lambda_value(T_type& a){ return a; }template <class T_type>const T_type& unwrap_lambda_value(const T_type& a){ return a; }template <class T_type>const T_type& unwrap_lambda_value(const lambda<T_type>& a){ return a.value_; }} /* namespace sigc */#endif /* _SIGC_LAMBDA_BASE_HPP_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -