Общепринято считать, что стандартная библиотека C++ обычно не предназначена для расширения с использованием наследования. Разумеется, я (и другие) критиковал людей, которые предлагают вывести из таких классов, как std::vector
. Тем не менее, этот вопрос: c++ exceptions, can what() be NULL? заставило меня понять, что существует хотя бы одна часть стандартной библиотеки, которая предназначена для расширения - std::exception
.Расширение стандартной библиотеки C++ по наследству?
Итак, мой вопрос состоит из двух частей:
Существует ли какие-либо другие классы стандартной библиотеки, которые предназначены извлекаемыми из?
Если кто-то из класса стандартной библиотеки, такого как
std::exception
, связан с интерфейсом, описанным в стандарте ISO? Например, была ли стандартная совместимость с программой, которая использовала класс исключения, который является членом функцииwhat()
, не возвращал NTBS (скажем, что он возвращал нулевой указатель)?
Вы упомянули, что не наследуете из классов, у которых нет виртуальных членов, - но тогда вы также упомянули классы политики.Таким образом (например), что не так с наследованием от распределителя (в частном порядке)? –
Я бы добавил, что некоторые вещи предназначены для небольшого града ree расширения через наследование, такие как 'std :: stack' и' std :: queue', потому что они имеют ** protected **, поскольку единственная причина для защищаемых вещей - разрешить дочернему классу читать данные. Очевидно, вам нужно быть очень осторожным в том, что вы делаете с этим. –