В C ++ можно определить операторы преобразования, которые не являются членами класса? Я знаю, как это сделать для обычных операторов (таких как +), но не для операторов преобразования.
Вот мой пример использования: я работаю с библиотекой C, которая выдает мне PA_Unichar *
, где библиотека определяет PA_Unichar как 16-битное целое число. На самом деле это строка, закодированная в UTF-16. Я хочу преобразовать его в std::string
кодированный в UTF-8. У меня есть весь код преобразования, готовый и работающий, и мне не хватает только синтаксического сахара, который позволил бы мне написать:
PA_Unichar *libOutput = theLibraryFunction();
std::string myString = libOutput;
(обычно в одной строке без переменной temp).
Также стоит отметить:
Я знаю, что std::string
не определяет неявное преобразование из char*
, и я знаю почему. Та же самая причина может применяться здесь, но это не относится к делу.
У меня есть ustring
, подкласс std::string
, который определяет правильный оператор преобразования из PA_Unichar*
. Это работает, но это означает использование ustring
переменных вместо std::string
и что , тогда требует преобразования в std::string
, когда я использую эти строки с другими библиотеками. Так что это не очень помогает.
Использование оператора присваивания не работает, поскольку эти должны быть членами класса.
Так возможно ли определить операторы неявного преобразования между двумя типами, которые вы не контролируете (в моем случае PA_Unichar*
и std::string
), которые могут быть или не быть типами классов?
Если нет, то какие могут быть обходные пути?