|
| Callback () |
|
template<typename FUNCTOR > |
| Callback (FUNCTOR const &functor, bool, bool) |
|
template<typename OBJ_PTR , typename MEM_PTR > |
| Callback (OBJ_PTR const &objPtr, MEM_PTR memPtr) |
|
| Callback (Ptr< CallbackImpl< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 > > const &impl) |
|
void | Assign (const CallbackBase &other) |
|
template<typename T > |
Callback< R, T2, T3, T4, T5,
T6, T7, T8, T9 > | Bind (T a) |
|
bool | CheckType (const CallbackBase &other) const |
|
bool | IsEqual (const CallbackBase &other) const |
|
bool | IsNull (void) const |
|
void | Nullify (void) |
|
template<typename TX1 , typename TX2 , typename TX3 > |
Callback< R, T4, T5, T6, T7,
T8, T9 > | ThreeBind (TX1 a1, TX2 a2, TX3 a3) |
|
template<typename TX1 , typename TX2 > |
Callback< R, T3, T4, T5, T6,
T7, T8, T9 > | TwoBind (TX1 a1, TX2 a2) |
|
|
R | operator() (void) const |
|
R | operator() (T1 a1) const |
|
R | operator() (T1 a1, T2 a2) const |
|
R | operator() (T1 a1, T2 a2, T3 a3) const |
|
R | operator() (T1 a1, T2 a2, T3 a3, T4 a4) const |
|
R | operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) const |
|
R | operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) const |
|
R | operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) const |
|
R | operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) const |
|
R | operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) const |
|
| CallbackBase () |
|
Ptr< CallbackImplBase > | GetImpl (void) const |
|
template<typename R, 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 ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >
Callback template class.
This class template implements the Functor Design Pattern. It is used to declare the type of a Callback:
- the first non-optional template argument represents the return type of the callback.
- the remaining (optional) template arguments represent the type of the subsequent arguments to the callback.
- up to nine arguments are supported.
Callback instances are built with the MakeCallback template functions. Callback instances have POD semantics: the memory they allocate is managed automatically, without user intervention which allows you to pass around Callback instances by value.
Sample code which shows how to use this class template as well as the function templates MakeCallback :
#include "ns3/callback.h"
#include "ns3/assert.h"
#include <iostream>
using namespace ns3;
static double
CbOne (
double a,
double b)
{
std::cout << "invoke cbOne a=" << a << ", b=" << b << std::endl;
return a;
}
public:
int CbTwo (double a) {
std::cout << "invoke cbTwo a=" << a << std::endl;
return -5;
}
};
int main (
int argc,
char *argv[])
{
double retOne;
retOne = one (10.0, 20.0);
int retTwo;
retTwo = two (10.0);
two = MakeNullCallback<int, double> ();
#if 0
#endif
#if 0
#endif
return 0;
}
- Internal:
- This code was originally written based on the techniques described in http://www.codeproject.com/cpp/TTLFunction.asp It was subsequently rewritten to follow the architecture outlined in "Modern C++ Design" by Andrei Alexandrescu in chapter 5, "Generalized Functors".
This code uses:
- default template parameters to saves users from having to specify empty parameters when the number of parameters is smaller than the maximum supported number
- the pimpl idiom: the Callback class is passed around by value and delegates the crux of the work to its pimpl pointer.
- two pimpl implementations which derive from CallbackImpl FunctorCallbackImpl can be used with any functor-type while MemPtrCallbackImpl can be used with pointers to member functions.
- a reference list implementation to implement the Callback's value semantics.
This code most notably departs from the alexandrescu implementation in that it does not use type lists to specify and pass around the types of the callback arguments. Of course, it also does not use copy-destruction semantics and relies on a reference list rather than autoPtr to hold the pointer.
Definition at line 920 of file callback.h.
template<typename R, 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>
template<typename R, 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>
template<typename FUNCTOR >
ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::Callback |
( |
FUNCTOR const & |
functor, |
|
|
bool |
, |
|
|
bool |
|
|
) |
| |
|
inline |
Construct a functor call back, supporting operator() calls
- Parameters
-
functor | the functor to run on this callback |
- Internal:
- There are two dummy args below to ensure that this constructor is always properly disambiguated by the c++ compiler.
Definition at line 934 of file callback.h.
template<typename R, 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>
template<typename OBJ_PTR , typename MEM_PTR >
ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::Callback |
( |
OBJ_PTR const & |
objPtr, |
|
|
MEM_PTR |
memPtr |
|
) |
| |
|
inline |
Construct a member function pointer call back.
- Parameters
-
objPtr | pointer to the object |
memPtr | pointer to the member function |
Definition at line 945 of file callback.h.
template<typename R, 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>
ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::Callback |
( |
Ptr< CallbackImpl< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 > > const & |
impl | ) |
|
|
inline |
template<typename R, 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>
Adopt the other's implementation, if type compatible
- Parameters
-
Definition at line 1155 of file callback.h.
Referenced by ns3::TracedCallback< T1, T2, T3, T4, T5, T6, T7, T8 >::Connect(), ns3::TracedCallback< T1, T2, T3, T4, T5, T6, T7, T8 >::ConnectWithoutContext(), ns3::TracedCallback< T1, T2, T3, T4, T5, T6, T7, T8 >::Disconnect(), and main().
template<typename R, 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>
template<typename T >
Callback<R,T2,T3,T4,T5,T6,T7,T8,T9> ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::Bind |
( |
T |
a | ) |
|
|
inline |
Bind the first arguments
- Parameters
-
- Returns
- the bound callback
Definition at line 965 of file callback.h.
Referenced by ns3::TracedCallback< T1, T2, T3, T4, T5, T6, T7, T8 >::Connect(), and ns3::TracedCallback< T1, T2, T3, T4, T5, T6, T7, T8 >::Disconnect().
template<typename R, 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>
Check for compatible types
- Parameters
-
- Returns
- true if other can be dynamic_cast to my type
Definition at line 1147 of file callback.h.
template<typename R, 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>
template<typename R, 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>
template<typename R, 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>
CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9>* ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::DoPeekImpl |
( |
void |
| ) |
const |
|
inlineprivate |
template<typename R, 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>
template<typename R, 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() |
( |
void |
| ) |
const |
|
inline |
template<typename R, 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() |
( |
T1 |
a1 | ) |
const |
|
inline |
template<typename R, 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() |
( |
T1 |
a1, |
|
|
T2 |
a2 |
|
) |
| const |
|
inline |
- Parameters
-
a1 | first argument |
a2 | second argument |
- Returns
- Callback value
Definition at line 1042 of file callback.h.
template<typename R, 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() |
( |
T1 |
a1, |
|
|
T2 |
a2, |
|
|
T3 |
a3 |
|
) |
| const |
|
inline |
- Parameters
-
a1 | first argument |
a2 | second argument |
a3 | third argument |
- Returns
- Callback value
Definition at line 1051 of file callback.h.
template<typename R, 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() |
( |
T1 |
a1, |
|
|
T2 |
a2, |
|
|
T3 |
a3, |
|
|
T4 |
a4 |
|
) |
| const |
|
inline |
- Parameters
-
a1 | first argument |
a2 | second argument |
a3 | third argument |
a4 | fourth argument |
- Returns
- Callback value
Definition at line 1061 of file callback.h.
template<typename R, 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() |
( |
T1 |
a1, |
|
|
T2 |
a2, |
|
|
T3 |
a3, |
|
|
T4 |
a4, |
|
|
T5 |
a5 |
|
) |
| const |
|
inline |
- Parameters
-
a1 | first argument |
a2 | second argument |
a3 | third argument |
a4 | fourth argument |
a5 | fifth argument |
- Returns
- Callback value
Definition at line 1072 of file callback.h.
template<typename R, 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() |
( |
T1 |
a1, |
|
|
T2 |
a2, |
|
|
T3 |
a3, |
|
|
T4 |
a4, |
|
|
T5 |
a5, |
|
|
T6 |
a6 |
|
) |
| const |
|
inline |
- Parameters
-
a1 | first argument |
a2 | second argument |
a3 | third argument |
a4 | fourth argument |
a5 | fifth argument |
a6 | sixth argument |
- Returns
- Callback value
Definition at line 1084 of file callback.h.
template<typename R, 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() |
( |
T1 |
a1, |
|
|
T2 |
a2, |
|
|
T3 |
a3, |
|
|
T4 |
a4, |
|
|
T5 |
a5, |
|
|
T6 |
a6, |
|
|
T7 |
a7 |
|
) |
| const |
|
inline |
- Parameters
-
a1 | first argument |
a2 | second argument |
a3 | third argument |
a4 | fourth argument |
a5 | fifth argument |
a6 | sixth argument |
a7 | seventh argument |
- Returns
- Callback value
Definition at line 1097 of file callback.h.
template<typename R, 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() |
( |
T1 |
a1, |
|
|
T2 |
a2, |
|
|
T3 |
a3, |
|
|
T4 |
a4, |
|
|
T5 |
a5, |
|
|
T6 |
a6, |
|
|
T7 |
a7, |
|
|
T8 |
a8 |
|
) |
| const |
|
inline |
- Parameters
-
a1 | first argument |
a2 | second argument |
a3 | third argument |
a4 | fourth argument |
a5 | fifth argument |
a6 | sixth argument |
a7 | seventh argument |
a8 | seventh argument |
- Returns
- Callback value
Definition at line 1111 of file callback.h.
template<typename R, 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() |
( |
T1 |
a1, |
|
|
T2 |
a2, |
|
|
T3 |
a3, |
|
|
T4 |
a4, |
|
|
T5 |
a5, |
|
|
T6 |
a6, |
|
|
T7 |
a7, |
|
|
T8 |
a8, |
|
|
T9 |
a9 |
|
) |
| const |
|
inline |
- Parameters
-
a1 | first argument |
a2 | second argument |
a3 | third argument |
a4 | fourth argument |
a5 | fifth argument |
a6 | sixth argument |
a7 | seventh argument |
a8 | eighth argument |
a9 | ninth argument |
- Returns
- Callback value
Definition at line 1126 of file callback.h.
template<typename R, 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>
template<typename TX1 , typename TX2 , typename TX3 >
Callback<R,T4,T5,T6,T7,T8,T9> ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::ThreeBind |
( |
TX1 |
a1, |
|
|
TX2 |
a2, |
|
|
TX3 |
a3 |
|
) |
| |
|
inline |
Bind the first three arguments
- Parameters
-
a1 | first argument to bind |
a2 | second argument to bind |
a3 | third argument to bind |
- Returns
- the bound callback
Definition at line 1000 of file callback.h.
template<typename R, 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>
template<typename TX1 , typename TX2 >
Callback<R,T3,T4,T5,T6,T7,T8,T9> ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::TwoBind |
( |
TX1 |
a1, |
|
|
TX2 |
a2 |
|
) |
| |
|
inline |
Bind the first two arguments
- Parameters
-
a1 | first argument to bind |
a2 | second argument to bind |
- Returns
- the bound callback
Definition at line 982 of file callback.h.