Создание класса-оболочки вокруг std :: string AND std :: string_view - PullRequest
0 голосов
/ 19 июня 2019

У меня есть приложение на C ++ с глубокой, утонченной логикой, разработанное в течение многих лет. К сожалению, он объединяет всевозможные типы строк: std :: string, C-строки, строки Pascal и строки для OS / платформы. Кроме того, каждый из этих типов строк часто использует различные кодировки.

Я создал класс-оболочку WBString, который содержит std :: string и может создавать из почти десятка типов моих ранее существующих строк.

Однако я бы хотел, чтобы базовая реализация могла использовать std :: string_view . Если я создаю из исходной строки, которая уже является const, std :: string_view может сохранить всевозможные закулисные конструкции при инициализации и передаче моего класса.

Это выглядит так, как если бы std :: string_view в C ++ 17 мог просто попытаться улучшить интеграцию с std :: string, но я думаю, что это может сломать существующие приложения.

Я мог видеть множество способов сделать это:

1) Шаблонизация моего класса WBString для хранения std :: string для неконстантных функций и отдельного WBStringView для константных строк;

2) Создайте базовый класс без данных и два отдельных унаследованных класса: WBString / WBStringView;

3) иметь единственный класс, который включает в себя оба элемента std :: string и std :: string_view в качестве членов данных;

4) Оставьте один элемент данных void *, который может быть любого типа.

Кто-нибудь сталкивался с этой проблемой раньше?

...