2

C#で書いています。を使うのが好きeventです。私のクラスがイベントを発行するだけで、誰がどのように処理するかを気にしないのは非常に自然なことです。ただし、コードを C++ に移行する必要があるため、引き続き使用する必要がありますeventか? そのようなコードを c++ に書き直すのはどれほど簡単でしょうか? おそらく、C++ に簡単に書き直すことができる他の手法を使用することは理にかなっているでしょうか?

upd私は同様の質問を見つけました C++、コンポジションでのC#のようなイベント

4

4 に答える 4

2

.net (C# を含む) のイベントは、Observer デザイン パターンの単なる解釈です。この同じパターンの C ++ 実装は、「同様の」動作をします。

編集:トピックに関するいくつかのすぐにグーグル検索されたリンク:

于 2013-01-03T14:47:59.707 に答える
1

コードを c++ に簡単に移植するには、 c#イベントの代わりに何を使用すればよいですか?

あなたが考えていることがeventにのみ関連していると確信しているなら、変更を加える必要はないと思います。

目標に到達するeventの基礎となるクラスを作成するだけです。

いろいろなやり方があるかもしれません。最初のステップは、CALLBACK について考えることです。

ここでは、たとえば、P-invoke を介して c++ コールバックを呼び出し、c# でデリゲートにラップするコードをいくつか提供します。

コールバックをインポートします。

[DllImport("devlink.dll")]
static extern int DLRegisterType2CallDeltas(uint pbxh,DLCALLLOGEVENT cb);

デリゲートを定義します。

public delegate void DLCALLLOGEVENT(uint pbxh, StringBuilder info);

イベントを宣言します。

public event EventHandler<CallLogEventArgs> CallLogEvent;

呼び出すイベントをラップします。

DLRegisterType2CallDeltas(
    pbxHandle,
    (pbxh, info) => {
        lock(thisLock)
            if(
                default(EventHandler<CallLogEventArgs>)!=CallLogEvent
                &&
                pbxHandle==pbxh
                )
                CallLogEvent(this, new CallLogEventArgs(info));
    }
    );

C ++で逆/反転する必要があります。しかし、まず第一に、イベントまたはデリゲートのクラスを実装すると、要求したことの実行に近づくことができます。

于 2013-01-03T14:58:46.697 に答える
0

ラムダと std::function を使用して、C++11 でイベントを非常に簡単に実装できます。

于 2013-01-03T14:21:46.737 に答える