Я использую стороннюю библиотеку с таким объявлением:
typedef struct {} __INTERNAL_DATA, *HandleType;
И я хотел бы создать класс, который принимает HandleType в конструкторе:
class Foo
{
Foo(HandleType h);
}
без включения заголовка, определяющего HandleType. Обычно я бы просто заранее объявил такой тип, но я не могу понять синтаксис для этого. Я очень хочу сказать что-то вроде:
struct *HandleType;
Но это говорит «Ожидаемый идентификатор перед *» в GCC. Единственное решение, которое я вижу, это написать свой класс следующим образом:
struct __INTERNAL_DATA;
class Foo
{
Foo(__INTERNAL_DATA *h);
}
Но это зависит от внутренних деталей библиотеки. Другими словами, он использует имя __INTERNAL_DATA, которое является деталью реализации.
Похоже, что должна быть возможность предварительно объявить HandleType (часть общедоступного API) без использования __INTERNAL_DATA (часть реализации библиотеки). Кто-нибудь знает, как это сделать?
РЕДАКТИРОВАТЬ: добавлено больше подробностей о том, что я ищу.