0

コード内に、 2つのにバインドしたいYarlメンバー関数を持つクラスがあります。これらのシグナルの1つは、次のように定義されたクラスのメンバーです。refreshboost::signalEventHandler

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

もう1つは、次のように宣言された別のファイルのフリーフローティング信号です。

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

のメンバー関数で、次のようなシグナル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。誰かが私が間違っているのを見ますか?

4

1 に答える 1

1

私はあなたがsignal_refreshを多重に定義していると推測しています。宣言前のstaticキーワードは、コードスニペットがヘッダーファイルにあることを示唆しており、再定義されたシンボルエラーなしでコンパイルするには、そこにstaticを配置する必要がありました。これを行った場合、ヘッダーを含むすべてのソースファイルはsignal_refreshの一意のコピーを取得するため、呼び出しているインスタンスは、接続したインスタンスではない可能性があります。

私はここで完全にオフマークかもしれませんが、それは可能です。

于 2010-07-08T19:44:09.087 に答える