Как переслать объявление класса, который был typedef'd? - PullRequest
2 голосов
/ 05 августа 2009

У меня есть строковый класс, который, что неудивительно, использует другую реализацию в зависимости от того, включен ли UNICODE.

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

Это хорошо работает, но у меня в настоящее время есть проблема, когда мне нужно переслать объявление типа StringT. Как я могу это сделать?

Я не могу сделать typedef StringT;, поэтому это затрудняет предварительное объявление. Можно ли сделать предварительное объявление этого типа typedef без необходимости вставлять код выше в верхнюю часть заголовочного файла?

Ответы [ 2 ]

8 голосов
/ 05 августа 2009

Следуйте примеру, установленному стандартным заголовком iosfwd. Напишите файл заголовка, который содержит это, и назовите его StringTFwd.h

class StringUTF16;
class StringUTF8;

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

По крайней мере, это можно использовать многократно и не портит заголовки, которые к нему относятся.

2 голосов
/ 05 августа 2009

Вы не можете. (Рационально: вы можете использовать typedef для определения псевдонима для базового типа, и те могут использовать различные соглашения ABI в зависимости от точного типа).

Не можете ли вы переслать декларацию StringUTF16 и StringUTF8, а затем использовать #idef?

...