Вы действительно не абстрагируете ничего, это плохая идея. Если вы кусаете пулю и исправляете ее сейчас, вам больше не придется с ней сталкиваться. Если вы продолжите откладывать, стоимость будет увеличиваться по мере вашего продвижения.
Вы действительно хотите, чтобы ваши основные типы были максимально простыми.
Использование 6 различных типов строк также невозможно, поэтому сузьте его до QString как можно скорее. Если вам нужна помощь в преобразовании типов, напишите некоторые функции адаптера. Для удобства я использовал простые вещи, подобные приведенным ниже, для преобразования между QString и std :: string.
std::string sstr(const QString &str);
QString qstr(const std::string &str);
Я уверен, что вы можете написать подобное для других упомянутых вами типов.
Если вы действительно хотите написать свой собственный класс, чтобы помочь с переходом, тогда вы должны защитить себя от его дальнейшего использования. Реальный риск заключается в том, что, несмотря на его предполагаемую амортизацию, он используется навсегда. Если вы разрешите ваш новый строковый класс в открытых интерфейсах, от него будет трудно избавиться. В этот момент это просто еще один строковый тип для обработки с другими.
class MyStringClass {
public:
MyStringClass(const std::string &val);
MyStringClass(const char *val);
MyStringClass(const wchar_t *val);
QString getQString() const;
};
Это дает простой способ получить то, что вам нужно в новом коде, и не допускает неявных преобразований. QString в любом случае является объектом-значением, но вы не уверены, что можете использовать его так, как хотите.
Скорее всего, вы не будете преобразовывать большую часть кода, но пока он находится в частной реализации, он не будет причинять вам боль так часто.