--- a/src/core/callback.h Fri Nov 28 17:42:10 2008 +0100 +++ a/src/core/callback.h Mon Dec 01 03:30:05 2008 +0100 @@ -94,90 +94,120 @@ }; // declare the CallbackImpl class -template +template class CallbackImpl; // define CallbackImpl for 0 params template -class CallbackImpl : public CallbackImplBase { +class CallbackImpl : public CallbackImplBase { public: virtual ~CallbackImpl () {} virtual R operator() (void) = 0; }; // define CallbackImpl for 1 params template -class CallbackImpl : public CallbackImplBase { +class CallbackImpl : public CallbackImplBase { public: virtual ~CallbackImpl () {} virtual R operator() (T1) = 0; }; // define CallbackImpl for 2 params template -class CallbackImpl : public CallbackImplBase { +class CallbackImpl : public CallbackImplBase { public: virtual ~CallbackImpl () {} virtual R operator() (T1, T2) = 0; }; // define CallbackImpl for 3 params template -class CallbackImpl : public CallbackImplBase { +class CallbackImpl : public CallbackImplBase { public: virtual ~CallbackImpl () {} virtual R operator() (T1, T2, T3) = 0; }; // define CallbackImpl for 4 params template -class CallbackImpl : public CallbackImplBase { +class CallbackImpl : public CallbackImplBase { public: virtual ~CallbackImpl () {} virtual R operator() (T1, T2, T3, T4) = 0; }; // define CallbackImpl for 5 params template -class CallbackImpl : public CallbackImplBase { +class CallbackImpl : public CallbackImplBase { public: virtual ~CallbackImpl () {} virtual R operator() (T1, T2, T3, T4, T5) = 0; }; // define CallbackImpl for 6 params - template -class CallbackImpl : public CallbackImplBase { +template +class CallbackImpl : public CallbackImplBase { public: virtual ~CallbackImpl () {} virtual R operator() (T1, T2, T3, T4, T5, T6) = 0; }; +// define CallbackImpl for 7 params +template +class CallbackImpl : public CallbackImplBase { +public: + virtual ~CallbackImpl () {} + virtual R operator() (T1, T2, T3, T4, T5, T6, T7) = 0; +}; +// define CallbackImpl for 8 params +template +class CallbackImpl : public CallbackImplBase { +public: + virtual ~CallbackImpl () {} + virtual R operator() (T1, T2, T3, T4, T5, T6, T7, T8) = 0; +}; +// define CallbackImpl for 9 params +template +class CallbackImpl : public CallbackImplBase { +public: + virtual ~CallbackImpl () {} + virtual R operator() (T1, T2, T3, T4, T5, T6, T7, T8, T9) = 0; +}; // an impl for Functors: -template -class FunctorCallbackImpl : public CallbackImpl { +template +class FunctorCallbackImpl : public CallbackImpl { public: FunctorCallbackImpl (T const &functor) : m_functor (functor) {} virtual ~FunctorCallbackImpl () {} R operator() (void) { - return m_functor (); + return m_functor (); } R operator() (T1 a1) { - return m_functor (a1); + return m_functor (a1); } R operator() (T1 a1,T2 a2) { - return m_functor (a1,a2); + return m_functor (a1,a2); } R operator() (T1 a1,T2 a2,T3 a3) { - return m_functor (a1,a2,a3); + return m_functor (a1,a2,a3); } R operator() (T1 a1,T2 a2,T3 a3,T4 a4) { - return m_functor (a1,a2,a3,a4); + return m_functor (a1,a2,a3,a4); } R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) { - return m_functor (a1,a2,a3,a4,a5); + return m_functor (a1,a2,a3,a4,a5); } R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) { return m_functor (a1,a2,a3,a4,a5,a6); } + R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) { + return m_functor (a1,a2,a3,a4,a5,a6,a7); + } + R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) { + return m_functor (a1,a2,a3,a4,a5,a6,a7,a8); + } + R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9) { + return m_functor (a1,a2,a3,a4,a5,a6,a7,a8,a9); + } virtual bool IsEqual (Ptr other) const { - FunctorCallbackImpl const *otherDerived = - dynamic_cast const *> (PeekPointer(other)); + FunctorCallbackImpl const *otherDerived = + dynamic_cast const *> (PeekPointer(other)); if (otherDerived == 0) { return false; @@ -193,8 +223,8 @@ }; // an impl for pointer to member functions -template -class MemPtrCallbackImpl : public CallbackImpl { +template +class MemPtrCallbackImpl : public CallbackImpl { public: MemPtrCallbackImpl (OBJ_PTR const&objPtr, MEM_PTR mem_ptr) : m_objPtr (objPtr), m_memPtr (mem_ptr) {} @@ -220,9 +250,18 @@ R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) { return ((CallbackTraits::GetReference (m_objPtr)).*m_memPtr) (a1, a2, a3, a4, a5, a6); } + R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) { + return ((CallbackTraits::GetReference (m_objPtr)).*m_memPtr) (a1, a2, a3, a4, a5, a6, a7); + } + R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) { + return ((CallbackTraits::GetReference (m_objPtr)).*m_memPtr) (a1, a2, a3, a4, a5, a6, a7, a8); + } + R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, T9 a9) { + return ((CallbackTraits::GetReference (m_objPtr)).*m_memPtr) (a1, a2, a3, a4, a5, a6, a7, a8, a9); + } virtual bool IsEqual (Ptr other) const { - MemPtrCallbackImpl const *otherDerived = - dynamic_cast const *> (PeekPointer (other)); + MemPtrCallbackImpl const *otherDerived = + dynamic_cast const *> (PeekPointer (other)); if (otherDerived == 0) { return false; @@ -240,34 +279,43 @@ }; // an impl for Bound Functors: -template -class BoundFunctorCallbackImpl : public CallbackImpl { +template +class BoundFunctorCallbackImpl : public CallbackImpl { public: template BoundFunctorCallbackImpl (FUNCTOR functor, ARG a) - : m_functor (functor), m_a (a) {} + : m_functor (functor), m_a (a) {} virtual ~BoundFunctorCallbackImpl () {} R operator() (void) { - return m_functor (m_a); + return m_functor (m_a); } R operator() (T1 a1) { - return m_functor (m_a,a1); + return m_functor (m_a,a1); } R operator() (T1 a1,T2 a2) { - return m_functor (m_a,a1,a2); + return m_functor (m_a,a1,a2); } R operator() (T1 a1,T2 a2,T3 a3) { - return m_functor (m_a,a1,a2,a3); + return m_functor (m_a,a1,a2,a3); } R operator() (T1 a1,T2 a2,T3 a3,T4 a4) { - return m_functor (m_a,a1,a2,a3,a4); + return m_functor (m_a,a1,a2,a3,a4); } R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) { - return m_functor (m_a,a1,a2,a3,a4,a5); + return m_functor (m_a,a1,a2,a3,a4,a5); + } + R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) { + return m_functor (m_a,a1,a2,a3,a4,a5,a6); + } + R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) { + return m_functor (m_a,a1,a2,a3,a4,a5,a6,a7); + } + R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) { + return m_functor (m_a,a1,a2,a3,a4,a5,a6,a7,a8); } virtual bool IsEqual (Ptr other) const { - BoundFunctorCallbackImpl const *otherDerived = - dynamic_cast const *> (PeekPointer (other)); + BoundFunctorCallbackImpl const *otherDerived = + dynamic_cast const *> (PeekPointer (other)); if (otherDerived == 0) { return false; @@ -324,9 +372,11 @@ */ template + typename T1 = empty, typename T2 = empty, + typename T3 = empty, typename T4 = empty, + typename T5 = empty, typename T6 = empty, + typename T7 = empty, typename T8 = empty, + typename T9 = empty> class Callback : public CallbackBase { public: Callback () {} @@ -335,26 +385,26 @@ // always properly disambiguited by the c++ compiler template Callback (FUNCTOR const &functor, bool, bool) - : CallbackBase (Create > (functor)) + : CallbackBase (Create > (functor)) {} template Callback (OBJ_PTR const &objPtr, MEM_PTR mem_ptr) - : CallbackBase (Create > (objPtr, mem_ptr)) + : CallbackBase (Create > (objPtr, mem_ptr)) {} - Callback (Ptr > const &impl) + Callback (Ptr > const &impl) : CallbackBase (impl) {} template - Callback Bind (T a) { - Ptr > impl = - Ptr > ( - new BoundFunctorCallbackImpl< - Callback, - R,T1,T2,T3,T4,T5,T6> (*this, a), false); - return Callback (impl); + Callback Bind (T a) { + Ptr > impl = + Ptr > ( + new BoundFunctorCallbackImpl< + Callback, + R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (*this, a), false); + return Callback (impl); } bool IsNull (void) const { @@ -385,6 +435,15 @@ R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6) const { return (*(DoPeekImpl ())) (a1,a2,a3,a4,a5,a6); } + R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7) const { + return (*(DoPeekImpl ())) (a1,a2,a3,a4,a5,a6,a7); + } + R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) const { + return (*(DoPeekImpl ())) (a1,a2,a3,a4,a5,a6,a7,a8); + } + R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, T9 a9) const { + return (*(DoPeekImpl ())) (a1,a2,a3,a4,a5,a6,a7,a8,a9); + } bool IsEqual (const CallbackBase &other) const { return m_impl->IsEqual (other.GetImpl ()); @@ -397,11 +456,11 @@ DoAssign (other.GetImpl ()); } private: - CallbackImpl *DoPeekImpl (void) const { - return static_cast *> (PeekPointer (m_impl)); + CallbackImpl *DoPeekImpl (void) const { + return static_cast *> (PeekPointer (m_impl)); } bool DoCheckType (Ptr other) const { - if (other != 0 && dynamic_cast *> (PeekPointer (other)) != 0) + if (other != 0 && dynamic_cast *> (PeekPointer (other)) != 0) { return true; } @@ -419,7 +478,7 @@ { NS_FATAL_ERROR ("Incompatible types. (feed to \"c++filt -t\")" " got=" << typeid (*other).name () << - ", expected=" << typeid (CallbackImpl *).name ()); + ", expected=" << typeid (CallbackImpl *).name ()); } m_impl = const_cast (PeekPointer (other)); } @@ -428,8 +487,10 @@ template -bool operator != (Callback a, Callback b) + typename T5, typename T6, + typename T7, typename T8, + typename T9> +bool operator != (Callback a, Callback b) { return !a.IsEqual (b); } @@ -541,7 +602,7 @@ * \param mem_ptr class method member pointer * \param objPtr class instance * \return a wrapper Callback - * Build Callbacks for class method members which takes five arguments + * Build Callbacks for class method members which takes six arguments * and potentially return a value. */ template @@ -551,6 +612,58 @@ template Callback MakeCallback (R (T::*mem_ptr) (T1,T2,T3,T4,T5,T6) const, OBJ objPtr) { return Callback (objPtr, mem_ptr); +} + +/** + * \ingroup MakeCallback + * \param mem_ptr class method member pointer + * \param objPtr class instance + * \return a wrapper Callback + * Build Callbacks for class method members which takes seven arguments + * and potentially return a value. + */ +template +Callback MakeCallback (R (T::*mem_ptr) (T1,T2,T3,T4,T5,T6,T7), OBJ objPtr) { + return Callback (objPtr, mem_ptr); +} +template +Callback MakeCallback (R (T::*mem_ptr) (T1,T2,T3,T4,T5,T6,T7) const, OBJ objPtr) { + return Callback (objPtr, mem_ptr); +} + + +/** + * \ingroup MakeCallback + * \param mem_ptr class method member pointer + * \param objPtr class instance + * \return a wrapper Callback + * Build Callbacks for class method members which takes eight arguments + * and potentially return a value. + */ +template +Callback MakeCallback (R (T::*mem_ptr) (T1,T2,T3,T4,T5,T6,T7,T8), OBJ objPtr) { + return Callback (objPtr, mem_ptr); +} +template +Callback MakeCallback (R (T::*mem_ptr) (T1,T2,T3,T4,T5,T6,T7,T8) const, OBJ objPtr) { + return Callback (objPtr, mem_ptr); +} + +/** + * \ingroup MakeCallback + * \param mem_ptr class method member pointer + * \param objPtr class instance + * \return a wrapper Callback + * Build Callbacks for class method members which takes nine arguments + * and potentially return a value. + */ +template +Callback MakeCallback (R (T::*mem_ptr) (T1,T2,T3,T4,T5,T6,T7,T8,T9), OBJ objPtr) { + return Callback (objPtr, mem_ptr); +} +template +Callback MakeCallback (R (T::*mem_ptr) (T1,T2,T3,T4,T5,T6,T7,T8,T9) const, OBJ objPtr) { + return Callback (objPtr, mem_ptr); } /** @@ -623,12 +736,48 @@ * \ingroup MakeCallback * \param fnPtr function pointer * \return a wrapper Callback - * Build Callbacks for functions which takes five arguments + * Build Callbacks for functions which takes six arguments * and potentially return a value. */ template Callback MakeCallback (R (*fnPtr) (T1,T2,T3,T4,T5,T6)) { return Callback (fnPtr, true, true); +} + +/** + * \ingroup MakeCallback + * \param fnPtr function pointer + * \return a wrapper Callback + * Build Callbacks for functions which takes seven arguments + * and potentially return a value. + */ +template +Callback MakeCallback (R (*fnPtr) (T1,T2,T3,T4,T5,T6,T7)) { + return Callback (fnPtr, true, true); +} + +/** + * \ingroup MakeCallback + * \param fnPtr function pointer + * \return a wrapper Callback + * Build Callbacks for functions which takes eight arguments + * and potentially return a value. + */ +template +Callback MakeCallback (R (*fnPtr) (T1,T2,T3,T4,T5,T6,T7,T8)) { + return Callback (fnPtr, true, true); +} + +/** + * \ingroup MakeCallback + * \param fnPtr function pointer + * \return a wrapper Callback + * Build Callbacks for functions which takes nine arguments + * and potentially return a value. + */ +template +Callback MakeCallback (R (*fnPtr) (T1,T2,T3,T4,T5,T6,T7,T8,T9)) { + return Callback (fnPtr, true, true); } @@ -702,12 +851,48 @@ * \ingroup MakeCallback * \overload Callback MakeNullCallback (void) * \return a wrapper Callback - * Build a null callback which takes five arguments + * Build a null callback which takes six arguments * and potentially return a value. */ template Callback MakeNullCallback (void) { return Callback (); +} + +/** + * \ingroup MakeCallback + * \overload Callback MakeNullCallback (void) + * \return a wrapper Callback + * Build a null callback which takes seven arguments + * and potentially return a value. + */ +template +Callback MakeNullCallback (void) { + return Callback (); +} + +/** + * \ingroup MakeCallback + * \overload Callback MakeNullCallback (void) + * \return a wrapper Callback + * Build a null callback which takes eight arguments + * and potentially return a value. + */ +template +Callback MakeNullCallback (void) { + return Callback (); +} + +/** + * \ingroup MakeCallback + * \overload Callback MakeNullCallback (void) + * \return a wrapper Callback + * Build a null callback which takes nine arguments + * and potentially return a value. + */ +template +Callback MakeNullCallback (void) { + return Callback (); } @@ -719,45 +904,66 @@ template Callback MakeBoundCallback (R (*fnPtr) (TX), ARG a) { - Ptr > impl = - Create >(fnPtr, a); + Ptr > impl = + Create >(fnPtr, a); return Callback (impl); } template Callback MakeBoundCallback (R (*fnPtr) (TX,T1), ARG a) { - Ptr > impl = - Create > (fnPtr, a); + Ptr > impl = + Create > (fnPtr, a); return Callback (impl); } template Callback MakeBoundCallback (R (*fnPtr) (TX,T1,T2), ARG a) { - Ptr > impl = - Create > (fnPtr, a); + Ptr > impl = + Create > (fnPtr, a); return Callback (impl); } template Callback MakeBoundCallback (R (*fnPtr) (TX,T1,T2,T3), ARG a) { - Ptr > impl = - Create > (fnPtr, a); + Ptr > impl = + Create > (fnPtr, a); return Callback (impl); } template Callback MakeBoundCallback (R (*fnPtr) (TX,T1,T2,T3,T4), ARG a) { - Ptr > impl = - Create > (fnPtr, a); + Ptr > impl = + Create > (fnPtr, a); return Callback (impl); } template Callback MakeBoundCallback (R (*fnPtr) (TX,T1,T2,T3,T4,T5), ARG a) { - Ptr > impl = - Create > (fnPtr, a); + Ptr > impl = + Create > (fnPtr, a); return Callback (impl); +} +template +Callback MakeBoundCallback (R (*fnPtr) (TX,T1,T2,T3,T4,T5,T6), ARG a) { + Ptr > impl = + Create > (fnPtr, a); + return Callback (impl); +} +template +Callback MakeBoundCallback (R (*fnPtr) (TX,T1,T2,T3,T4,T5,T6,T7), ARG a) { + Ptr > impl = + Create > (fnPtr, a); + return Callback (impl); +} +template +Callback MakeBoundCallback (R (*fnPtr) (TX,T1,T2,T3,T4,T5,T6,T7,T8), ARG a) { + Ptr > impl = + Create > (fnPtr, a); + return Callback (impl); } } // namespace ns3 --- a/src/core/traced-callback.h Fri Nov 28 17:42:10 2008 +0100 +++ a/src/core/traced-callback.h Mon Dec 01 03:30:05 2008 +0100 @@ -37,7 +37,9 @@ * the chain of callbacks. */ template + typename T3 = empty, typename T4 = empty, + typename T5 = empty, typename T6 = empty, + typename T7 = empty, typename T8 = empty> class TracedCallback { public: @@ -81,9 +83,13 @@ void operator() (T1 a1, T2 a2) const; void operator() (T1 a1, T2 a2, T3 a3) const; void operator() (T1 a1, T2 a2, T3 a3, T4 a4) const; + void operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) const; + void operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) const; + void operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) const; + void operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) const; private: - typedef std::list > CallbackList; + typedef std::list > CallbackList; CallbackList m_callbackList; }; @@ -94,33 +100,41 @@ namespace ns3 { template -TracedCallback::TracedCallback () + typename T3, typename T4, + typename T5, typename T6, + typename T7, typename T8> +TracedCallback::TracedCallback () : m_callbackList () {} template + typename T3, typename T4, + typename T5, typename T6, + typename T7, typename T8> void -TracedCallback::ConnectWithoutContext (const CallbackBase & callback) +TracedCallback::ConnectWithoutContext (const CallbackBase & callback) { - Callback cb; + Callback cb; cb.Assign (callback); m_callbackList.push_back (cb); } template + typename T3, typename T4, + typename T5, typename T6, + typename T7, typename T8> void -TracedCallback::Connect (const CallbackBase & callback, std::string path) +TracedCallback::Connect (const CallbackBase & callback, std::string path) { - Callback cb; + Callback cb; cb.Assign (callback); - Callback realCb = cb.Bind (path); + Callback realCb = cb.Bind (path); m_callbackList.push_back (realCb); } template + typename T3, typename T4, + typename T5, typename T6, + typename T7, typename T8> void -TracedCallback::DisconnectWithoutContext (const CallbackBase & callback) +TracedCallback::DisconnectWithoutContext (const CallbackBase & callback) { for (typename CallbackList::iterator i = m_callbackList.begin (); i != m_callbackList.end (); /* empty */) @@ -136,19 +150,23 @@ } } template + typename T3, typename T4, + typename T5, typename T6, + typename T7, typename T8> void -TracedCallback::Disconnect (const CallbackBase & callback, std::string path) +TracedCallback::Disconnect (const CallbackBase & callback, std::string path) { - Callback cb; + Callback cb; cb.Assign (callback); - Callback realCb = cb.Bind (path); + Callback realCb = cb.Bind (path); DisconnectWithoutContext (realCb); } template + typename T3, typename T4, + typename T5, typename T6, + typename T7, typename T8> void -TracedCallback::operator() (void) const +TracedCallback::operator() (void) const { for (typename CallbackList::const_iterator i = m_callbackList.begin (); i != m_callbackList.end (); i++) @@ -157,9 +175,11 @@ } } template + typename T3, typename T4, + typename T5, typename T6, + typename T7, typename T8> void -TracedCallback::operator() (T1 a1) const +TracedCallback::operator() (T1 a1) const { for (typename CallbackList::const_iterator i = m_callbackList.begin (); i != m_callbackList.end (); i++) @@ -168,9 +188,11 @@ } } template + typename T3, typename T4, + typename T5, typename T6, + typename T7, typename T8> void -TracedCallback::operator() (T1 a1, T2 a2) const +TracedCallback::operator() (T1 a1, T2 a2) const { for (typename CallbackList::const_iterator i = m_callbackList.begin (); i != m_callbackList.end (); i++) @@ -179,9 +201,11 @@ } } template + typename T3, typename T4, + typename T5, typename T6, + typename T7, typename T8> void -TracedCallback::operator() (T1 a1, T2 a2, T3 a3) const +TracedCallback::operator() (T1 a1, T2 a2, T3 a3) const { for (typename CallbackList::const_iterator i = m_callbackList.begin (); i != m_callbackList.end (); i++) @@ -190,9 +214,11 @@ } } template + typename T3, typename T4, + typename T5, typename T6, + typename T7, typename T8> void -TracedCallback::operator() (T1 a1, T2 a2, T3 a3, T4 a4) const +TracedCallback::operator() (T1 a1, T2 a2, T3 a3, T4 a4) const { for (typename CallbackList::const_iterator i = m_callbackList.begin (); i != m_callbackList.end (); i++) @@ -200,6 +226,58 @@ (*i) (a1, a2, a3, a4); } } +template +void +TracedCallback::operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) const +{ + for (typename CallbackList::const_iterator i = m_callbackList.begin (); + i != m_callbackList.end (); i++) + { + (*i) (a1, a2, a3, a4, a5); + } +} +template +void +TracedCallback::operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) const +{ + for (typename CallbackList::const_iterator i = m_callbackList.begin (); + i != m_callbackList.end (); i++) + { + (*i) (a1, a2, a3, a4, a5, a6); + } +} +template +void +TracedCallback::operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) const +{ + for (typename CallbackList::const_iterator i = m_callbackList.begin (); + i != m_callbackList.end (); i++) + { + (*i) (a1, a2, a3, a4, a5, a6, a7); + } +} +template +void +TracedCallback::operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) const +{ + for (typename CallbackList::const_iterator i = m_callbackList.begin (); + i != m_callbackList.end (); i++) + { + (*i) (a1, a2, a3, a4, a5, a6, a7, a8); + } +} }//namespace ns3