⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 functorexpr.h

📁 著名的数学计算类库
💻 H
📖 第 1 页 / 共 3 页
字号:
    { 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 + -