/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ #include "ns3/callback.h" #include "ns3/assert.h" #include using namespace ns3; static double CbOne (double a, double b) { std::cout << "invoke cbOne a=" << a << ", b=" << b << std::endl; return a; } class MyCb { public: int CbTwo (double a) { std::cout << "invoke cbTwo a=" << a << std::endl; return -5; } }; int main (int argc, char *argv[]) { // return type: double // first arg type: double // second arg type: double Callback one; // build callback instance which points to cbOne function one = MakeCallback (&CbOne); // this is not a null callback NS_ASSERT (!one.IsNull ()); // invoke cbOne function through callback instance double retOne; retOne = one (10.0, 20.0); // return type: int // first arg type: double Callback two; MyCb cb; // build callback instance which points to MyCb::cbTwo two = MakeCallback (&MyCb::CbTwo, &cb); // this is not a null callback NS_ASSERT (!two.IsNull ()); // invoke MyCb::cbTwo through callback instance int retTwo; retTwo = two (10.0); two = MakeNullCallback (); // invoking a null callback is just like // invoking a null function pointer: // it will crash. //int retTwoNull = two (20.0); NS_ASSERT (two.IsNull ()); return 0; }