Как переслать объявление класса, который был typedef'd?

StackOverflow https://stackoverflow.com/questions/1234031

Вопрос

У меня есть строковый класс, который, что неудивительно, использует другую реализацию в зависимости от того, включен или нет 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 ?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top