
Hello, Can boost help me eliminate the ugly facade function I use below? I have a boost::signals2::signal that passes an object ("CPerson"). I want to connect to this signal not to receive the object ("CPerson") but to receive the result of one of its methods ("CPerson::GetAge()"). Can boost help me with this? If so I'm eager to read and learn about it, I just need to know what it is called. Thank you! Chris //=== #include <boost/signals2/signal.hpp> //---------- // A CPerson offers GetAge() //---------- struct CPerson { int GetAge() const { return 0; } }; //---------- // A CCompany has a boss and a signal // to tell when boss is hired //---------- struct CCompany { CPerson GetBoss() const { return mBoss; } boost::signals2::signal<void(const CPerson&)> BossHired; CPerson mBoss; }; //---------- // A CProcessor processes int ages. // It does not know aobut CPerson //---------- struct CProcessor { void f(int Age) {} }; //---------- // ProcessorFacade is used to strip // an age of a CPerson before // passing the age to CProcessor //---------- void ProcessorFacade(CProcessor& Processor, const CPerson& Person) { Processor.f(Person.GetAge()); } //---------- // main puts it all together //---------- int main() { CCompany Company; CProcessor Processor; // Compiler error: the signal sends an instance of CPerson, // not the result of CPerson::GetAge(). Too bad because // CProcessor does not have know about CPerson // // Company.BossHired.connect( // boost::bind(&CProcessor::f, &Processor, _1)); // So we use an ugly facade instead Company.BossHired.connect( boost::bind(ProcessorFacade, boost::ref(Processor), _1)); return 0; }