2

当然のことながら、UNICODE が有効かどうかによって異なる実装を使用する文字列クラスがあります。

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

これはうまく機能しますが、現在、StringT typedef を前方宣言する必要があるという問題があります。これどうやってするの?

できないtypedef StringT;ので、前方宣言が難しくなります。上記のコードをヘッダー ファイルの先頭に貼り付けなくても、この typedef された型の前方宣言を行うことは可能ですか?

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 に答える