Мне кажется, что в этом нет большой пользы; по моему опыту, точка использования этих платформ заключается в том, что вы не будете изобретать велосипед заново. Если вы обнаружите, что вам нужно написать новый класс строки или новый векторный класс, вы должны серьезно задуматься об этом и убедиться, что вы не просто делаете что-то другое неправильно. Я не говорю, что нет причин писать свой собственный класс строк, я просто говорю, что это редко. Учитывая это, я бы предложил просто использовать нужные фреймворки напрямую.
Что касается функций преобразования, я полагаю, что компилятор не увидит вашу функцию ToCString иначе, чем это выглядело бы:
CString ToCString( const std::string & ) {...}
Это потому, что определение типа C ++ не создает новый тип, а только псевдоним существующего типа.
Дальнейшие мысли
Я думаю, что беспокойство, которое вы озвучиваете здесь, является очень естественным, и я знаю, что оно возникало в моей команде несколько раз. Тем не менее, я думаю, что ответ по-прежнему, как указано выше.
Хотя классы STL, вероятно, не идеальны, они были разработаны очень умными людьми, которые много думали об этой задаче. Таким образом, шансы на то, что вам понадобится написать полный класс строки замены, очень малы. Более того, без малейшего намерения вам (или мне) понадобится очень много времени, чтобы реализовать надежный универсальный класс строк, который мог бы подходящим образом заменить std :: string.
Другой возможный способ подумать об этом - это: вы бы подумали «заменить» класс String в Java или C #? Я думаю, что ответ здесь явно «нет», хотя иногда могут быть ограниченные области, где вы используете что-то кроме String для представления последовательности символов. То же самое и здесь: std :: string настолько близко, насколько C ++ достигает встроенного строкового класса, и вам почти наверняка не нужно его заменять.