trace大致分为两种
TracedCallback
签名类型和TracedValue
签名类型
TracedCallback
主要用来记录读取参数
TracedValue
主要用来记录数值变化
所以在想要获取某些数据信息的时候,并进行某种运算要使用TracedCallback
,用记录某种值变化并打印就要使用TracedValue
。
回调函数是需要自己写的,所以造成了千人千面。
callback
是模板类,makecallback
是API,通过makecallback
,可以将callback
的实例与某个函数进行匹配
即callback<返回值, ****> example = makeCallback(回调函数)
callback是个函数指针,在类外面定义一个 typedef 取个别名,给别的地方用
然后再makecallback绑定一下
一个简单的例子:
typedef Callback<void, Ptr<Vehicle>, std::string, Ptr<const Packet> > DeviceTraceCallback; //在类外定义
private:
DeviceTraceCallback m_devTxTrace;
public:
DeviceTraceCallback GetDevTxTraceCallback() {return m_devTxTrace;}
void SetDevTxTraceCallback(DeviceTraceCallback devTxTrace) { m_devTxTrace = devTxTrace; }
protected:
void DevTxTrace (std::string context, Ptr<const Packet> p) { m_devTxTrace(Ptr<Vehicle>(this), context, p);}
实现:
std::ostringstream oss;
oss << "/NodeList/" << m_node->GetId()<< "/DeviceList/0/Mac/MacTx";
Config::Connect (oss.str(), MakeCallback (&Vehicle::DevTxTrace, this));