在C++中可以定义不是类成员的转换运算符吗?我知道如何为常规运营商(例如+)做到这一点,但不适用于转换运营商。C++用户定义的转换运算符没有类?
这里是我的用例:我使用一个C库来处理一个PA_Unichar *
,其中库定义PA_Unichar是一个16位int。它实际上是一个用UTF-16编码的字符串。我想将它转换为以UTF-8编码的std::string
。我把所有的代码转换和准备工作,而我唯一缺少的语法糖,让我写:
PA_Unichar *libOutput = theLibraryFunction();
std::string myString = libOutput;
(通常是在没有临时变量一行)。
另外值得注意:
我知道
std::string
不会char*
定义隐式转换,我知道这是为什么。这里也可能适用同样的理由,但那不是重点。我确实有一个
ustring
,std::string
的子类,它定义了从PA_Unichar*
正确的转换运算符。它的工作原理,但这意味着使用ustring
变量而不是std::string
,然后需要转换到std::string
时,我使用这些字符串与其他库。所以这并没有太大的帮助。使用赋值运算符不起作用,因为那些必须是是类成员。
那么,这可以定义两种类型的你不用管(在我的情况PA_Unichar*
和std::string
),这可能是也可能不是类类型之间的隐式转换运营商?
如果不是什么可能的解决方法?
有什么不对?没有太多,但仍有两件事: - 视觉混乱,当你有数百个毫无意义的调用来转换 - 这个解决方案意味着使用临时的std :: string。这意味着数据总是被复制两次。这可能是也可能不是问题,但不是很令人满意。 – 2009-10-24 14:07:03
大多数编译器会优化额外的拷贝。 – rlbond 2009-10-24 15:09:52
jdmuys> rlbond是对的,RVO在实践中是常见的和真实的。你可能会阅读:http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/ – Klaim 2009-10-24 15:26:25