我正在阅读下面的C ++代码:
// Take a whole packet from somewhere.
EthernetII packet = ...;
// Find the IP layer
const IP* ip = packet.find_pdu<IP>();
if(ip) {
// If the pointer is not null, then it will point to the IP layer
}
// Find the TCP layer. This will throw a pdu_not_found exception
// if there is no TCP layer in this packet.
const TCP& tcp = packet.rfind_pdu<TCP>();
PDU::rfind_pdu()
的定义如下。我的问题是,如果不将一个论点传递给rfind_pdu()
?什么是允许<IP>
附加到函数调用的语法?
template<typename T> const T& Tins::PDU::rfind_pdu(PDUType type = T::pdu_flag) const inline
查找并返回第一个PDU 匹配给定的标志。
参数
flag
正在搜索的标志。
答案 0 :(得分:0)
参数不必必然传递,因为它默认到T::pdu_flag
。
调用站点的<TCP>
表示法消除模板(这是必需的,因为不能从任何函数参数收集适当的模板实例,因为没有任何函数参数)。无论是什么原因,默认参数值都是TCP::pdu_flag
。