Как переслать объявление класса, который был typedef'd?
-
22-07-2019 - |
Вопрос
У меня есть строковый класс, который, что неудивительно, использует другую реализацию в зависимости от того, включен или нет UNICODE.
#ifdef UNICODE
typedef StringUTF16 StringT;
#else
typedef StringUTF8 StringT;
#endif
Это хорошо работает, но у меня в настоящее время есть проблема, когда мне нужно переслать объявление типа StringT. Как я могу это сделать?
Я не могу сделать typedef StringT;
, поэтому это затрудняет предварительное объявление. Можно ли сделать предварительное объявление этого типа typedef без необходимости вставлять приведенный выше код в верхнюю часть заголовочного файла?
Решение
Следуйте примеру, заданному стандартным заголовком iosfwd. Напишите файл заголовка, который содержит это, и назовите его StringTFwd.h
class StringUTF16;
class StringUTF8;
#ifdef UNICODE
typedef StringUTF16 StringT;
#else
typedef StringUTF8 StringT;
#endif
По крайней мере, это можно использовать многократно и не портит заголовки, которые к нему относятся.
Другие советы
Ты не можешь. (Рационально: вы можете использовать typedef для определения псевдонима для базового типа, и они могут использовать различные соглашения ABI в зависимости от точного типа).
Не можете ли вы переслать декларацию StringUTF16 и StringUTF8, а затем использовать #idef
?