В libstdc++
и libc++
внутренние узлы для списков (например, list
и forward_list
) и других деревьев построены (как минимум) из двух частей: базового класса узла; и сам класс узла. Например, вместо:
struct sl_full_node {
sl_full_node *p;
int value;
};
... мы увидим что-то вроде:
struct sl_node_base {
sl_node_base *p;
};
struct sl_node : sl_node_base {
int value;
}
Простой, самодостаточный пример этой идиомы можно найти в односвязном список предложений от 2008 года здесь . В чем преимущества такого подхода?