2

我有一个字符串类,不出所料,它使用不同的实现,具体取决于是否启用了 UNICODE。

#ifdef UNICODE
typedef StringUTF16 StringT;
#else
typedef StringUTF8 StringT;
#endif

这很好用,但我目前有一个问题,我需要转发声明 StringT typedef。我怎样才能做到这一点?

我不能这样做typedef StringT;,这使得前向声明变得棘手。是否可以对这种类型定义的类型进行前向声明,而不必将上面的代码传递到头文件的顶部?

4

2 回答 2

8

遵循 iosfwd 标准头设置的示例。编写一个包含此内容的头文件,并将其命名为 StringTFwd.h

class StringUTF16;
class StringUTF8;

#ifdef UNICODE
typedef StringUTF16 StringT;
#else
typedef StringUTF8 StringT;
#endif

至少这是可重用的,并且不会使引用它的标题变得丑陋。

于 2009-08-05T15:42:03.033 回答
2

你不能。(理性:您可以使用 typedef 为基本类型定义别名,并且这些别名可能使用不同的 ABI 约定,具体取决于精确类型)。

你不能转发声明 StringUTF16 和 StringUTF8 然后使用你的#idef

于 2009-08-05T15:40:17.980 回答