подключение функции к boost :: signal выполняется, но не вызывает функцию - PullRequest
0 голосов
/ 08 июля 2010

В моем коде есть класс Yarl с функцией-членом refresh, которую я хочу связать с двумя boost::signal с.Один из этих сигналов является членом класса EventHandler, определенного следующим образом:

class EventHandler {
    public:
        boost::signal<void()> sigRefresh;
};

Другой является свободным плавающим сигналом в другом файле, объявленном так:

namespace utility {
    static boost::signal<void()> signal_refresh;
}

inфункция-член Yarl, я подключаю refresh к таким сигналам:

    events::EventHandler eventHandler;

    eventHandler.sigRefresh.connect(boost::bind(&Yarl::refresh, this));
    utility::signal_refresh.connect(boost::bind(&Yarl::refresh, this));

и позже я вызываю оба сигнала следующим образом:

sigRefresh();
signal_refresh();

Этот код компилируетсяи работает, и sigRefresh работает точно так, как ожидалось.Однако ничего не происходит, когда я звоню signal_refresh.Насколько я могу судить, refresh никогда не подключался к signal_refresh.Кто-нибудь видит, что я делаю не так?

1 Ответ

1 голос
/ 08 июля 2010

Я предполагаю, что вы многократно определяете signal_refresh. Ключевое слово static перед его объявлением предполагает, что фрагмент кода находится в заголовочном файле, и вам нужно было поместить туда static, чтобы он компилировался без переопределенных ошибок символов. Если вы сделали это, то каждый исходный файл, включая заголовок, получит уникальную копию signal_refresh, и поэтому вызываемый вами экземпляр может не совпадать с экземпляром, к которому вы его подключили.

Я могу быть совершенно не в себе, но это возможно.

...