Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk melaksanakan mengikat diri sendiri?

//---------------------------1-------------------
    template<int _Nx>
    struct _Ph
    {    // placeholder
    };

//-----------------2-------------------------------

// TEMPLATE FUNCTION bind (explicit return type)
template<class _Ret,
    class _Fx,
    class... _Types> inline
    _Binder<_Ret, _Fx, _Types...> bind(_Fx&& _Func, _Types&&... _Args)
    {    // bind a callable object with an explicit return type
    return (_Binder<_Ret, _Fx, _Types...>(
        _STD forward<_Fx>(_Func), _STD forward<_Types>(_Args)...));
    }

///--------------------------3------------------------

    // PLACEHOLDER ARGUMENTS
        namespace placeholders {    // placeholders
constexpr _Ph<1> _1{};
constexpr _Ph<2> _2{};
constexpr _Ph<3> _3{};
constexpr _Ph<4> _4{};
constexpr _Ph<5> _5{};
constexpr _Ph<6> _6{};
constexpr _Ph<7> _7{};
constexpr _Ph<8> _8{};
constexpr _Ph<9> _9{};
constexpr _Ph<10> _10{};
constexpr _Ph<11> _11{};
constexpr _Ph<12> _12{};
constexpr _Ph<13> _13{};
constexpr _Ph<14> _14{};
constexpr _Ph<15> _15{};
constexpr _Ph<16> _16{};
constexpr _Ph<17> _17{};
constexpr _Ph<18> _18{};
constexpr _Ph<19> _19{};
constexpr _Ph<20> _20{};
        }    // namespace placeholders

Saya tidak faham kod di tengah Bagaimana ia dilaksanakan dengan bahagian 3? Siapa yang boleh menulis ikatan yang lebih mudah, terima kasih.

大家讲道理大家讲道理2706 hari yang lalu873

membalas semua(1)saya akan balas

  • 三叔

    三叔2017-06-15 09:25:57

    Ditulis dalam pseudokod ia boleh kelihatan seperti ini (mengabaikan butiran pemajuan dan metaprogramming):

    template <size_t i, ...>
    auto get(...) {
      if (binding_argument_type[i] == placeholder)
        return calling_argument[the_index_in_the_placeholder];
      else
        return binding_argument[i];
    }
    
    template <class Fn, class... binding_argument_type>
    auto bind(Fn fn, binding_argument_type... binding_argument) {
      return [...](auto... calling_argument) {
        return fn(get<index>(binding_argument..., calling_argument...)...);
      };
    }

    balas
    0
  • Batalbalas