【发布时间】:2010-05-21 10:23:05
【问题描述】:
我正致力于在 C 和 C++ 中实现不同的 API,并且想知道有哪些技术可用于避免客户端在从框架接收字符串或将字符串传回时出现编码错误。例如,想象一个简单的 C++ 插件 API,客户可以实施它来影响翻译。它可能具有这样的功能:
const char *getTranslatedWord( const char *englishWord );
现在,假设我要强制所有字符串都以 UTF-8 格式传递。当然我会记录这个要求,但我希望编译器强制执行正确的编码,也许通过使用专用类型。例如,这样的事情:
class Word {
public:
static Word fromUtf8( const char *data ) { return Word( data ); }
const char *toUtf8() { return m_data; }
private:
Word( const char *data ) : m_data( data ) { }
const char *m_data;
};
我现在可以在 API 中使用这种特殊类型:
Word getTranslatedWord( const Word &englishWord );
不幸的是,这很容易导致效率低下。 Word 类缺少适当的复制构造函数、赋值运算符等。我想尽可能避免不必要的数据复制。另外,我看到Word 被越来越多的实用功能(如length 或fromLatin1 或substr 等)扩展的危险,我宁愿不编写又一个字符串类。我只想要一个避免意外编码混淆的小容器。
我想知道是否其他人对此有一些经验并可以分享一些有用的技术。
编辑:在我的特殊情况下,该 API 在 Windows 和 Linux 上使用 MSVC 6 - Windows 上的 MSVC 10 和 Linux 上的 gcc 3 和 4。
【问题讨论】:
-
@Anders:我更新了我的问题来回答你的评论。