0

MVC アプリケーションを作成していますが、モデルが出力テキストを GUI に送信して表示できるようにする方法が必要です。

関数ポインターを推奨する人もいますが、メンバー関数の関数ポインターを渡す場合は、オブジェクトへのポインターも渡す必要があることを学びました (メソッドを呼び出すことができるように、オブジェクトポインターだけを渡さないのはなぜですか? )

とにかく、boost::signals2 の使用も推奨されています。非常に単純な実例を実装しました。基本的に、信号を GUI オブジェクトの関数にバインドします。次に、シグナルへのポインターを、シグナルをトリガーできるオブジェクトに渡します。以下のコードを参照してください...

struct GUI
{
    void talk()
    {
        cout << "hello" << endl;
    }
};

class Person {
public:
    Person(){}
    Person(const signal<void ()>* sig) : sig(sig){}
    virtual ~Person(){}

    void testSig()
    {
       (*sig)();
    }


private:
    const signal<void ()>* sig;
};

int main() {
    boost::signals2::signal<void ()> sig;
    GUI gui;
    sig.boost::signals2::connect(boost::bind(&GUI::talk, &gui));

    Person tom(&sig);
    tom.testSig();
}

私は信号の完全な初心者であるため、それらを使用することを意図しているため、それらを使用しているかどうかは完全にはわかりません.

4

1 に答える 1

4

personクラスの中にシグナルを入れてみませんか?次のようなことができます。

struct GUI
{
    void talk() {
        cout << "hello" << endl;
    }
};

class Person {
    boost::signals2::signal<void ()> sig_;
public:
    Person() {}
    virtual ~Person() {}

    template <typename F>
    void connect(F f) {
        sig_.connect(f);
    }

    void testSig() {
       sig_();
    }
};

int main()
{
    GUI gui;
    Person tom;

    tom.connect(boost::bind(&GUI::talk, &gui));
    tom.testSig();
}
于 2013-02-24T21:11:37.067 に答える