struct slist_node_base {
slist_node_base* next;
};
template
struct slist_node : public slist_node_base {
T data;
};
若合併為:
template
struct slist_node {
slist_node* next;
T data;
};
則 slist_node_base* 類型的指針無法統一操作不同 `T` 實例化的節點,導致容器無法實現類型擦除。
std::list 內部使用 `__list_node_base` / `__list_nodestd::shared_ptr 的控制塊同樣採用類型擦除技術。`slist_node_base` 為「結構統一介面」,`slist_node