У меня есть небольшой собственный заголовочный файл, в котором объявлено несколько функций, одна из которых имеет тип возврата DWORD
. Я не хотел бы перетаскивать windows.h
просто, чтобы получить официальное определение этого типа, поскольку этот файл огромен, и мой заголовок будет использоваться во многих исходных модулях, которые в противном случае не нуждаются в этом.
Конечно, на практике я знаю, что DWORD
- это просто unsigned int
, но я бы предпочел более гигиеничный подход, если возможно, включить официальный заголовочный файл.
На на этой странице говорится, что DWORD
определено в windef.h
, но, к сожалению, включение только этого небольшого файла напрямую приводит к ошибкам компиляции - очевидно, он ожидает включения других заголовков. (Кроме того, тот факт, что мой файл является файлом заголовка, также означает, что я не могу просто объявить WIN32_LEAN_AND_MEAN
, поскольку исходный файл, который включает в себя #include мой файл, может потребовать, чтобы его оставили неопределенным.)
Есть идеи? Я знаю, что это не конец света - я могу просто продолжить #include <windows.h>
- но думал, что у кого-то может быть лучшая идея!
[EDIT]
Спасибо за ваши ответы. Тем, кто предложил использовать другой тип, позвольте мне объяснить, почему в этом случае это нежелательно: я установил разные, специфичные для платформы версии двух функций в разных исходных файлах и попросил конфигурацию CMake определить текущую платформу. и выберите, какой построить. В Windows мои функции выглядят так:
typedef DWORD TimePoint;
TimePoint GetTimeNow(void);
double TimeDifference(TimePoint start, TimePoint end);
Версия Windows GetTimeNow()
просто вызывает Windows API timeGetTime()
, который имеет тип возврата DWORD
, и поэтому он должен иметь тот же тип возврата. (На других платформах TimePoint
будет иметь другой тип, например struct timeval
на платформах UNIXy.) По сути, значения типа TimePoint
непрозрачны, и единственное, что вы можете сделать с ними, это передать два из них TimeDifference()
для измерения прошедшего времени между ними в секундах. Это позволяет кросс-платформенную разработку. К сожалению, это все еще означает, что клиентский код должен знать конкретный тип TimePoint
.