Я пытаюсь построить сигнал / слот в C ++ 11, я хотел, чтобы функция «connect» использовалась через оператор + =, но так как оператор + = может принимать только один аргумент, и для того, чтобывозьмите функцию-член, которая вызывается, мне также нужен указатель объекта.
Поэтому я должен сделать аргумент стандартной парой. Код выглядит следующим образом:
#include <iostream>
class listener{
public:
void on_event(){ /* ... */ }
};
class event{
public:
template<typename T, typename F = void(T::*)()>
void operator+=( std::pair<T*, F> p ){
/* ... */
}
};
int main (int argc, char *argv[]) {
event e;
listener l;
e += std::pair(&l, &listener::on_event); // works
e += std::make_pair(&l, &listener::on_event); // works
e += {&l, &listener::on_event}; // NOT works!!
}
Myвопрос в том, как я могу заставить его работать только с {} на стороне пользователя?Большое спасибо!