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