Потому что C ++ не может наследовать интерфейс без публичного наследования.Вы можете наследовать реализацию с частным наследованием, но тогда все является частным.Если вы хотите использовать тот же интерфейс, что и std::pair
, вы должны быть a std::pair
.
Также учтите это.Это явно неопределенное поведение:
std::sub_match<BidirectionalIterator> theMatch = ...;
std::pair<BidirectionalIterator> *pMatch = &theMatch;
delete pMatch;
Но так же и это:
std::sub_match<BidirectionalIterator> theMatch = ...;
std::pair<BidirectionalIterator> *pMatch = &theMatch.pair;
delete pMatch;
Почему первый вопрос вызывает гораздо больше беспокойства, чем второй?sub_match
и pair
- легкие объекты (конечно, в зависимости от их содержимого).Они предназначены для копирования или передачи по ссылке, и все это на 100% безопасно.Существует мало причин для размещения их в куче и использования их через указатели.Поэтому, хотя я понимаю вашу озабоченность, я думаю, что это вряд ли произойдет в любом реальном коде.