Örnek Boost kullanarak::tam bir C Eventing Sinyaller
Boost.org bu adresleme de öğretici farkındayım: Boost.org Signals Tutorial ama bu örnekler tam ve üzerinde biraz basitleştirilmiş. Örnekleri dosyaları vardır gösterme ve kod bazı bölümleri biraz belirsiz.
İhtiyacım olan şey burada:
ClassA sinyalleri/birden çok olay yükseltir
ClassB bu olaylara abone olur (Birden fazla sınıflar abone olabilir)
Projemde bu mesajları bazı işlem yapan bir iş sınıfı için olayları yükseltir işleyicisi alt düzey bir mesajım var ve UI (wxFrames) bildirir. Bu sipariş ne, kim kimi arar, vb) kablolu olabilir nasıl bilmek istiyorum.
CEVAP
Aşağıdaki kod istediğiniz ne az çalışan bir örnektir. ClassA
iki sinyal; SigA
(ve kabul) herhangi bir parametre, SigB
Gönderen int
bir gönderir yayar. ClassB
her bir fonksiyon çağrıldığında cout
çıkış olan iki işlevi vardır. Örnekte ClassA
(a
) ve ClassB
iki (b
b2
) bir örneği yok. main
ve sinyalleri bağlamak için ateş kullanılır. ClassA
ClassB
birbirimize bir şey olduğunu belirterek değer (değiller yaniderleme zamanı bağlı).
#include <boost/signal.hpp>
#include <boost/bind.hpp>
#include <iostream>
using namespace boost;
using namespace std;
struct ClassA
{
signal<void ()> SigA;
signal<void (int)> SigB;
};
struct ClassB
{
void PrintFoo() { cout << "Foo" << endl; }
void PrintInt(int i) { cout << "Bar: " << i << endl; }
};
int main()
{
ClassA a;
ClassB b, b2;
a.SigA.connect(bind(&ClassB::PrintFoo, &b));
a.SigB.connect(bind(&ClassB::PrintInt, &b, _1));
a.SigB.connect(bind(&ClassB::PrintInt, &b2, _1));
a.SigA();
a.SigB(4);
}
Çıkış:
Foo Bar: 4 Bar: 4
Kısalık için alıyorum ben bazı kısayolları olmaz normal kullanımda üretim kodu (özellikle access kontrol lax, normalde 'gizle' sinyali kayıt arkasında bir fonksiyon gibi KeithB örneği).
boost::signal
zorluk en boost::bind
kullanmaya alışık almak gibi görünüyor.biraz zihin-bükme başta! Zor bir örneğin de SigA
olsa da bind
ClassB::PrintInt
*ile 21* kanca için kullanabilirsinizdeğilint
: bir yayarlar
a.SigA.connect(bind(&ClassB::PrintInt, &b, 10));
Bu yardımcı olur umarım!
hesaplamak ve C boost kullanarak örnek...
Örnek: Faaliyet ve Hizmet kullanarak M...
Kullanarak temel örnek .() ajax JSONP ...
Bir örnek sınıf adını kullanarak oluşt...
C varsayılan kurucu olmadan yazın örne...