【发布时间】:2022-01-08 15:15:55
【问题描述】:
pb_ds(<ext/pb_ds/assoc_container.hpp> 和其他 4 个头文件)是用于某些数据结构(例如红黑树)的 GNU C++ 库。而且我遇到了修改树时应用更新的代码:
PB_DS_CLASS_T_DEC
template<typename Node_Update_>
inline void
PB_DS_CLASS_C_DEC::
apply_update(node_pointer p_nd, Node_Update_* /*p_update*/)
{
node_update::operator()(node_iterator(p_nd),
node_const_iterator(static_cast<node_pointer>(0)));
}
node_update 类的格式如下:
template<class Node_CItr,class Node_Itr,class Cmp_Fn,class _Alloc>
struct my_node_update
{
typedef my_type metadata_type;
void operator()(Node_Itr it, Node_CItr end_it)
{
//...
}
};
我对代码node_update::operator()... 感到困惑,我认为它从node_update 类调用了一个非静态成员函数,但没有创建对象。那么调用是如何进行的呢?
【问题讨论】:
-
apply_update也是一个成员函数,或许node_update是一个基类? -
没有足够的上下文来做比猜测更多的事情。一个例子:如果这些全大写标识符(
PB_DS_CLASS_T_DEC和PB_DS_CLASS_C_DEC)是宏,那么编译器在预处理后看到的代码可能与我们看到的大不相同。