diff --git a/include/libcamera/base/bound_method.h b/include/libcamera/base/bound_method.h index 9c212f1e..76ce8017 100644 --- a/include/libcamera/base/bound_method.h +++ b/include/libcamera/base/bound_method.h @@ -98,35 +98,17 @@ public: using PackType = BoundMethodPack; private: - template - void invokePack(BoundMethodPackBase *pack, std::index_sequence) + template + std::enable_if_t::value, void> + invokePack(BoundMethodPackBase *pack, std::index_sequence) { PackType *args = static_cast(pack); args->ret_ = invoke(std::get(args->args_)...); } -public: - BoundMethodArgs(void *obj, Object *object, ConnectionType type) - : BoundMethodBase(obj, object, type) {} - - void invokePack(BoundMethodPackBase *pack) override - { - invokePack(pack, std::make_index_sequence{}); - } - - virtual R activate(Args... args, bool deleteMethod = false) = 0; - virtual R invoke(Args... args) = 0; -}; - -template -class BoundMethodArgs : public BoundMethodBase -{ -public: - using PackType = BoundMethodPack; - -private: - template - void invokePack(BoundMethodPackBase *pack, std::index_sequence) + template + std::enable_if_t::value, void> + invokePack(BoundMethodPackBase *pack, std::index_sequence) { /* args is effectively unused when the sequence I is empty. */ PackType *args [[gnu::unused]] = static_cast(pack); @@ -142,8 +124,8 @@ public: invokePack(pack, std::make_index_sequence{}); } - virtual void activate(Args... args, bool deleteMethod = false) = 0; - virtual void invoke(Args... args) = 0; + virtual R activate(Args... args, bool deleteMethod = false) = 0; + virtual R invoke(Args... args) = 0; }; template