#include #include #include #include using namespace Bu; void PrintPlain( const Bu::String &s ) { println(s); } void PrintFancy( const Bu::String &s ) { println("STRING!!! ->%1<- !!!GNIRTS").arg( s ); } int Square( int a ) { return a*a; } int Double( int a ) { return a+a; } template class SignalList1 : public Bu::List > { typedef Bu::List > MyType; public: SignalList1() { } using MyType::iterator; using MyType::const_iterator; R operator()( P p1 ) { println("===Non-void um...non-specialization==="); R tmp; for( typename MyType::iterator i = MyType::begin(); i; i++ ) tmp = (*i)( p1 ); return tmp; } }; template class SignalList1 : public Bu::List > { typedef Bu::List > MyType; public: SignalList1() { } using MyType::iterator; using MyType::const_iterator; void operator()( P p1 ) { println("===Void specialization==="); for( typename MyType::iterator i = MyType::begin(); i; i++ ) (*i)( p1 ); } }; int main() { SignalList1 lPrints; lPrints += slot(PrintPlain); lPrints += slot(PrintFancy); lPrints("Hello there"); SignalList1 lMaths; lMaths += slot(Double); lMaths += slot(Square); println("Math'd %1 = %2").arg( 5 ).arg( lMaths(5) ); return 0; }