что это можно сделать с помощью макросов (но я не уверен)
                  
                  
                  Типа, если заюзать это: https://stackoverflow.com/questions/12447557/can-we-have-recursive-macros
                  
                  
                  и это: template <std::size_t N>
                  
                  
                  decltype(auto) make_placeholder() {
                  
                  
                      return std::placeholders::__ph<N>();
                  
                  
                  };
                  
                  
                  
                  
                  
                  А вообще мне хотелось бы следующее (коммент в последнем примере кода):
                  
                  
                  template <typename Ret, typename ...Args>
                  
                  
                  class Signal {
                  
                  
                  public:
                  
                  
                      using BindFunction = std::function<Ret(Args...)>;
                  
                  
                  
                  
                  
                  public:
                  
                  
                      explicit Signal(BindFunction _function)
                  
                  
                          : m_bind_function(_function)
                  
                  
                      {}
                  
                  
                  
                  
                  
                  public:
                  
                  
                      Ret call(Args... args) {
                  
                  
                          return m_bind_function(args...);
                  
                  
                      }
                  
                  
                  
                  
                  
                  protected:
                  
                  
                      BindFunction m_bind_function;
                  
                  
                  };
                  
                  
                  
                  
                  
                  инстанс которого создается:
                  
                  
                  
                  
                  
                  template <typename Ret, typename Type, typename ...Args>
                  
                  
                  decltype(auto) make_signal(Type* _object, Ret (Type::*_method)(Args...)) {
                  
                  
                      return Signal<Ret, Args...>(std::bind(_method, _object, /* ТУТ ДОЛЖНО БЫТЬ ЧТО_ТО...*/));
                  
                  
                  };
                  
                  
                
Используйте лямбду вместо std::bind.
Обсуждают сегодня