2015-07-15 13 views
6

adlı bir işleve sahip Reciever adında bir sınıfım var; Event, BaseEvent öğesinden devralınır. Bu sınıfın belirli bir örneğine bir bağlantı oluşturmak istiyorum. Örnek rec olarak adlandırılır.Temel argümanlı bir işleve türetilmiş bir argümanla nasıl işlev yapabilirim?

std::vector<std::function<void(const BaseEvent*)>> 
: girdi, değil bir Event olarak BaseEvent alır şöyle bir std::function belirtmek için bir vektör bu depolamak çalıştığınızda

void(Reciever::*func)(const Event *) = &Reciever::recieve; 
auto recievePtr = std::bind(func, &rec, std::placeholders::_1); 

Ancak, var: Bu ben kullanımını yapmak için

recievePtr'u nasıl döküm yapabilirim, böylece vektörü düzgün bir şekilde saklayabilirim? Bu mümkün mü? Bir BaseEvent için bir işlev işaretçisi kullanarak sorunu Reciever tüm BaseEvent

cevap

2

Aşağıdakine boyunca bir şeyler deneyebilirsiniz dayalı farklı türetilmiş sınıfları ile birden recieve() yöntemleri var olabilir. Bu, derledim ve makinemde iyi çalıştı. Visual Studio hedefleme platformu araç seti v120.

+0

Hmm, bu, bağlama ek yükünü kaldırır. Yine de daha iyi bir yol varsa merak ediyorum. – user975989

İlgili konular