Does this seem like a good wrapper class for continuations in the C++ API? class Continuation { public: Continuation(TSMutex mutexp = TSMutexCreate()) : _cont(TSContCreate(_generalEventFunc, mutexp)) { TSContDataSet(_cont, static_cast<void *>(this)); }
TSCont asTSCont() const { return _cont; } void destroy() { if (_cont) { TSContDestroy(_cont); _cont = nullptr; } } ~Continuation() { if (_cont) { TSContDestroy(_cont); } } // No copying. Continuation(const Continuation &) = delete; Continuation &operator=(const Continuation &) = delete; // Moving allowed. Continuation(Continuation &&that) { _cont = that._cont; that._cont = nullptr; } Continuation & operator=(Continuation &&that) { if (&that != this) { if (_cont) { TSContDestroy(_cont); } _cont = that._cont; that._cont = nullptr; } return *this; } explicit operator bool() const { return _cont != nullptr; } private: // Distinct continuation behavior is achieved by overriding this function in a derived continuation type. // virtual int _run(TSEvent event, void *edata) = 0; // This is the event function for all continuations in C++ plugins. // static int _generalEventFunc(TSCont cont, TSEvent event, void *edata); TSCont _cont; };