В С++ можно определить операторы преобразования, которые не являются членами класса? Я знаю, как это сделать для обычных операторов (таких как +), но не для операторов преобразования.
Вот мой вариант использования: я работаю с библиотекой 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
, а для этого then требуется преобразование вstd::string
, когда я использую эти строки с другими библиотеками. Так что это не очень помогает.Использование оператора присваивания не работает, так как они должны быть членами класса.
Итак, возможно ли определить неявные операторы преобразования между двумя типами, которые вы не контролируете (в моем случае PA_Unichar*
и std::string
), которые могут быть или не быть типами класса?
Если нет, то какие могут быть обходные пути?