boost::function Syntax nachbauen



  • Hallo zusammen,

    ggf. finde ich es in den Unmengen der Bibliothek nicht, oder sehe es einfach nicht. Ich habe mich gefragt, wie schaffe ich es, die Syntax der boost::function<> nachzubauen, eben jenes:

    boost::function<void (int, int)> entspricht boost::function<void, int, int>

    Gruß,

    _gast01



  • Es ist nicht gar klar, wonach du genau fragst. Vielleicht hilft das:

    template<class Ret, class... Args>
    class abstract_func_wrapper
    {
    public:
      virtual ~abstract_func_wrapper() {}
      virtual abstract_func_wrapper *clone() const = 0;
      virtual Ret invoke(Args... args) = 0;
    };
    
    template<class Signature>
    class function;               // bleibt undefiniert
    
    template<class Ret, class... Args>
    class function<Ret(Args...)>  // partielle Spezialisierung
    {
      ....
      abstract_func_wrapper *wrapper_ptr;
      ....
      Ret operator()(Args... args) const {
        if (!wrapper_ptr) throw bad_function_call();
        return wrapper_ptr->invoke(std::forward<Args>(args)...);
      }
      ....
    };
    


  • Warum eigentlich invoke und nicht gleich operator ()? 🤡



  • Hat, vielen Dank 🙂



  • 314159265358979 schrieb:

    Warum eigentlich invoke und nicht gleich operator ()? 🤡

    zeiger->invoke(params)
    

    finde ich schöner als

    zeiger->operator()(params)
    

    oder

    (*zeiger)(params)
    


  • Okay, das ist Geschmackssache. Ich bevorzuge die dritte Variante.


Log in to reply