?? functorexpr.h
字號:
{ return c_.funcname(x,y); } \private: \ const classname& c_; \};#define _BZ_MAKE_FUNCTOR3(classname, funcname) \class _bz_Functor ## classname ## funcname \{ \public: \ _bz_Functor ## classname ## funcname (const classname& c) \ : c_(c) \ { } \ template<typename T_numtype1, typename T_numtype2, typename T_numtype3> \ inline BZ_PROMOTE(BZ_PROMOTE(T_numtype1, T_numtype2), T_numtype3) \ operator()(T_numtype1 x, T_numtype2 y, T_numtype3 z) const \ { return c_.funcname(x,y,z); } \private: \ const classname& c_; \};#define _BZ_MAKE_FUNCTOR_RET(classname, funcname, ret) \class _bz_Functor ## classname ## funcname \{ \public: \ _bz_Functor ## classname ## funcname (const classname& c) \ : c_(c) \ { } \ template<typename T_numtype1> \ inline ret operator()(T_numtype1 x) const \ { return c_.funcname(x); } \private: \ const classname& c_; \};#define _BZ_MAKE_FUNCTOR2_RET(classname, funcname, ret) \class _bz_Functor ## classname ## funcname \{ \public: \ _bz_Functor ## classname ## funcname (const classname& c) \ : c_(c) \ { } \ template<typename T_numtype1, typename T_numtype2> \ inline ret operator()(T_numtype1 x, T_numtype2 y) const \ { return c_.funcname(x,y); } \private: \ const classname& c_; \};#define _BZ_MAKE_FUNCTOR3_RET(classname, funcname, ret) \class _bz_Functor ## classname ## funcname \{ \public: \ _bz_Functor ## classname ## funcname (const classname& c) \ : c_(c) \ { } \ template<typename T_numtype1, typename T_numtype2, typename T_numtype3> \ inline ret operator()(T_numtype1 x, T_numtype2 y, T_numtype3 z) const \ { return c_.funcname(x,y,z); } \private: \ const classname& c_; \};#define BZ_DECLARE_FUNCTOR(classname) \template<typename P_expr> \BZ_BLITZ_SCOPE(_bz_ArrayExpr)<BZ_BLITZ_SCOPE(_bz_FunctorExpr)< \ classname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr>::T_expr::T_numtype> > \operator()(const BZ_BLITZ_SCOPE(ETBase)<P_expr>& a) const \{ \ return BZ_BLITZ_SCOPE(_bz_ArrayExpr)< \ BZ_BLITZ_SCOPE(_bz_FunctorExpr)<classname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr>::T_expr::T_numtype> > \ (*this, a.unwrap()); \}#define BZ_DECLARE_FUNCTOR2(classname) \template<typename P_expr1, typename P_expr2> \BZ_BLITZ_SCOPE(_bz_ArrayExpr)<BZ_BLITZ_SCOPE(_bz_FunctorExpr2)< \ classname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr, \ BZ_PROMOTE(_bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr::T_numtype, \ _bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr::T_numtype)> > \operator()(const BZ_BLITZ_SCOPE(ETBase)<P_expr1>& a, \ const BZ_BLITZ_SCOPE(ETBase)<P_expr2>& b) const \{ \ return BZ_BLITZ_SCOPE(_bz_ArrayExpr)< \ BZ_BLITZ_SCOPE(_bz_FunctorExpr2)<classname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr, \ BZ_PROMOTE(_bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr::T_numtype, \ _bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr::T_numtype)> > \ (*this, a.unwrap(), b.unwrap()); \}#define BZ_DECLARE_FUNCTOR3(classname) \template<typename P_expr1, typename P_expr2, typename P_expr3> \BZ_BLITZ_SCOPE(_bz_ArrayExpr)<BZ_BLITZ_SCOPE(_bz_FunctorExpr3)< \ classname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr3>::T_expr, \ BZ_PROMOTE(_bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr::T_numtype, \ BZ_PROMOTE(_bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr::T_numtype, \ _bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr3>::T_expr::T_numtype))> > \operator()(const BZ_BLITZ_SCOPE(ETBase)<P_expr1>& a, \ const BZ_BLITZ_SCOPE(ETBase)<P_expr2>& b, \ const BZ_BLITZ_SCOPE(ETBase)<P_expr3>& c) const \{ \ return BZ_BLITZ_SCOPE(_bz_ArrayExpr)< \ BZ_BLITZ_SCOPE(_bz_FunctorExpr3)<classname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr3>::T_expr, \ BZ_PROMOTE(_bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr::T_numtype, \ BZ_PROMOTE(_bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr::T_numtype, \ _bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr3>::T_expr::T_numtype))> >\ (*this, a.unwrap(), b.unwrap(), c.unwrap()); \}#define BZ_DECLARE_FUNCTOR_RET(classname, ret) \template<typename P_expr> \BZ_BLITZ_SCOPE(_bz_ArrayExpr)<BZ_BLITZ_SCOPE(_bz_FunctorExpr)< \ classname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr>::T_expr, \ ret> > \operator()(const BZ_BLITZ_SCOPE(ETBase)<P_expr>& a) const \{ \ return BZ_BLITZ_SCOPE(_bz_ArrayExpr)< \ BZ_BLITZ_SCOPE(_bz_FunctorExpr)<classname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr>::T_expr, \ ret> > \ (*this, a.unwrap()); \}#define BZ_DECLARE_FUNCTOR2_RET(classname, ret) \template<typename P_expr1, typename P_expr2> \BZ_BLITZ_SCOPE(_bz_ArrayExpr)<BZ_BLITZ_SCOPE(_bz_FunctorExpr2)< \ classname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr, \ ret> > \operator()(const BZ_BLITZ_SCOPE(ETBase)<P_expr1>& a, \ const BZ_BLITZ_SCOPE(ETBase)<P_expr2>& b) const \{ \ return BZ_BLITZ_SCOPE(_bz_ArrayExpr)< \ BZ_BLITZ_SCOPE(_bz_FunctorExpr2)<classname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr, \ ret> > \ (*this, a.unwrap(), b.unwrap()); \}#define BZ_DECLARE_FUNCTOR3_RET(classname, ret) \template<typename P_expr1, typename P_expr2, typename P_expr3> \BZ_BLITZ_SCOPE(_bz_ArrayExpr)<BZ_BLITZ_SCOPE(_bz_FunctorExpr3)< \ classname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr3>::T_expr, \ ret> > \operator()(const BZ_BLITZ_SCOPE(ETBase)<P_expr1>& a, \ const BZ_BLITZ_SCOPE(ETBase)<P_expr2>& b, \ const BZ_BLITZ_SCOPE(ETBase)<P_expr3>& c) const \{ \ return BZ_BLITZ_SCOPE(_bz_ArrayExpr)< \ BZ_BLITZ_SCOPE(_bz_FunctorExpr3)<classname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr3>::T_expr, \ ret> > \ (*this, a.unwrap(), b.unwrap(), c.unwrap()); \}#define BZ_DECLARE_MEMBER_FUNCTION(classname, funcname) \_BZ_MAKE_FUNCTOR(classname, funcname) \template<typename P_expr> \BZ_BLITZ_SCOPE(_bz_ArrayExpr)<BZ_BLITZ_SCOPE(_bz_FunctorExpr)< \ _bz_Functor ## classname ## funcname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr>::T_expr::T_numtype> > \funcname(const BZ_BLITZ_SCOPE(ETBase)<P_expr>& a) const \{ \ return BZ_BLITZ_SCOPE(_bz_ArrayExpr)< \ BZ_BLITZ_SCOPE(_bz_FunctorExpr)< \ _bz_Functor ## classname ## funcname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr>::T_expr::T_numtype> > \ (*this, a.unwrap()); \}#define BZ_DECLARE_MEMBER_FUNCTION2(classname, funcname) \_BZ_MAKE_FUNCTOR2(classname, funcname) \template<typename P_expr1, typename P_expr2> \BZ_BLITZ_SCOPE(_bz_ArrayExpr)<BZ_BLITZ_SCOPE(_bz_FunctorExpr2)< \ _bz_Functor ## classname ## funcname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr, \ BZ_PROMOTE(_bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr::T_numtype, \ _bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr::T_numtype)> > \funcname(const BZ_BLITZ_SCOPE(ETBase)<P_expr1>& a, \ const BZ_BLITZ_SCOPE(ETBase)<P_expr2>& b) const \{ \ return BZ_BLITZ_SCOPE(_bz_ArrayExpr)< \ BZ_BLITZ_SCOPE(_bz_FunctorExpr2)< \ _bz_Functor ## classname ## funcname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr, \ BZ_PROMOTE(_bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr::T_numtype, \ _bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr::T_numtype)> > \ (*this, a.unwrap(), b.unwrap()); \}#define BZ_DECLARE_MEMBER_FUNCTION3(classname, funcname) \_BZ_MAKE_FUNCTOR3(classname, funcname) \template<typename P_expr1, typename P_expr2, typename P_expr3> \BZ_BLITZ_SCOPE(_bz_ArrayExpr)<BZ_BLITZ_SCOPE(_bz_FunctorExpr3)< \ _bz_Functor ## classname ## funcname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr3>::T_expr, \ BZ_PROMOTE(_bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr::T_numtype, \ BZ_PROMOTE(_bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr::T_numtype, \ _bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr3>::T_expr::T_numtype))> > \funcname(const BZ_BLITZ_SCOPE(ETBase)<P_expr1>& a, \ const BZ_BLITZ_SCOPE(ETBase)<P_expr2>& b, \ const BZ_BLITZ_SCOPE(ETBase)<P_expr3>& c) const \{ \ return BZ_BLITZ_SCOPE(_bz_ArrayExpr)< \ BZ_BLITZ_SCOPE(_bz_FunctorExpr3)< \ _bz_Functor ## classname ## funcname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr3>::T_expr, \ BZ_PROMOTE(_bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr::T_numtype, \ BZ_PROMOTE(_bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr::T_numtype, \ _bz_typename \ BZ_BLITZ_SCOPE(asExpr)<P_expr3>::T_expr::T_numtype))> >\ (*this, a.unwrap(), b.unwrap(), c.unwrap()); \}#define BZ_DECLARE_MEMBER_FUNCTION_RET(classname, funcname, ret) \_BZ_MAKE_FUNCTOR_RET(classname, funcname, ret) \template<typename P_expr> \BZ_BLITZ_SCOPE(_bz_ArrayExpr)<BZ_BLITZ_SCOPE(_bz_FunctorExpr)< \ _bz_Functor ## classname ## funcname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr>::T_expr, \ ret> > \funcname(const BZ_BLITZ_SCOPE(ETBase)<P_expr>& a) const \{ \ return BZ_BLITZ_SCOPE(_bz_ArrayExpr)< \ BZ_BLITZ_SCOPE(_bz_FunctorExpr)< \ _bz_Functor ## classname ## funcname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr>::T_expr, \ ret> > \ (*this, a.unwrap()); \}#define BZ_DECLARE_MEMBER_FUNCTION2_RET(classname, funcname, ret) \_BZ_MAKE_FUNCTOR2_RET(classname, funcname, ret) \template<typename P_expr1, typename P_expr2> \BZ_BLITZ_SCOPE(_bz_ArrayExpr)<BZ_BLITZ_SCOPE(_bz_FunctorExpr2)< \ _bz_Functor ## classname ## funcname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr, \ ret> > \funcname(const BZ_BLITZ_SCOPE(ETBase)<P_expr1>& a, \ const BZ_BLITZ_SCOPE(ETBase)<P_expr2>& b) const \{ \ return BZ_BLITZ_SCOPE(_bz_ArrayExpr)< \ BZ_BLITZ_SCOPE(_bz_FunctorExpr2)< \ _bz_Functor ## classname ## funcname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr, \ ret> > \ (*this, a.unwrap(), b.unwrap()); \}#define BZ_DECLARE_MEMBER_FUNCTION3_RET(classname, funcname, ret) \_BZ_MAKE_FUNCTOR3_RET(classname, funcname, ret) \template<typename P_expr1, typename P_expr2, typename P_expr3> \BZ_BLITZ_SCOPE(_bz_ArrayExpr)<BZ_BLITZ_SCOPE(_bz_FunctorExpr3)< \ _bz_Functor ## classname ## funcname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr3>::T_expr, \ ret> > \funcname(const BZ_BLITZ_SCOPE(ETBase)<P_expr1>& a, \ const BZ_BLITZ_SCOPE(ETBase)<P_expr2>& b, \ const BZ_BLITZ_SCOPE(ETBase)<P_expr3>& c) const \{ \ return BZ_BLITZ_SCOPE(_bz_ArrayExpr)< \ BZ_BLITZ_SCOPE(_bz_FunctorExpr3)< \ _bz_Functor ## classname ## funcname, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr1>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr2>::T_expr, \ _bz_typename BZ_BLITZ_SCOPE(asExpr)<P_expr3>::T_expr, \ ret> > \ (*this, a.unwrap(), b.unwrap(), c.unwrap()); \}#endif // BZ_ARRAY_FUNCTOREXPR_H
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -