Есть ли простое одноразовое решение проблемы загрязнения пространства имен препроцессора, вызванного WIN32 API?

Как мы все знаем, включение загрязняет все пространства имен в C ++, имея один препроцессор #define для каждой функции Win32 API, который может принимать либо многобайтовый, либо UTF-16 ввод. Пример:

#ifdef UNICODE
#define CreateFont CreateFontW
#else
#define CreateFont CreateFontA
#endif

Я уже несколько лет использую собственный Win32 API, но вот-вот сдаюсь! В любом нетривиальном проекте коллизий имен достаточно, чтобы ваше лицо посинело. загрязняет все пространства имен в C ++, имея один препроцессор #define для каждой функции Win32 API, который может принимать либо многобайтовые данные, либо входные данные UTF-16. Пример: # ...

Как мы все знаем, включение загрязняет все пространства имен в C ++, имея один препроцессор #define для каждой функции Win32 API, который может принимать либо многобайтовый, либо UTF-16 ввод. Пример:

#ifdef UNICODE
#define CreateFont CreateFontW
#else
#define CreateFont CreateFontA
#endif

Я уже несколько лет использую собственный Win32 API, но вот-вот сдаюсь! В любом нетривиальном проекте коллизий имен достаточно, чтобы ваше лицо посинело. загрязняет все пространства имен в C ++, имея один препроцессор #define для каждой функции Win32 API, который может принимать либо многобайтовые данные, либо входные данные UTF-16. Пример: # ...

Как мы все знаем, включение загрязняет все пространства имен в C ++, имея один препроцессор #define для каждой функции Win32 API, который может принимать либо многобайтовый, либо UTF-16 ввод. Пример:

#ifdef UNICODE
#define CreateFont CreateFontW
#else
#define CreateFont CreateFontA
#endif

Я уже несколько лет использую собственный Win32 API, но вот-вот сдаюсь! В любом нетривиальном проекте коллизий имен достаточно, чтобы ваше лицо посинело. загрязняет все пространства имен в C ++, имея один препроцессор #define для каждой функции Win32 API, который может принимать многобайтовые входные данные или UTF-16. Пример:

#ifdef UNICODE
#define CreateFont CreateFontW
#else
#define CreateFont CreateFontA
#endif

Я уже несколько лет использую собственный Win32 API, но вот-вот сдаюсь! В любом нетривиальном проекте коллизий имен достаточно, чтобы ваше лицо посинело. загрязняет все пространства имен в C ++, имея один препроцессор #define для каждой функции Win32 API, который может принимать многобайтовые входные данные или UTF-16. Пример:

#ifdef UNICODE
#define CreateFont CreateFontW
#else
#define CreateFont CreateFontA
#endif

Я уже несколько лет использую собственный Win32 API, но вот-вот сдаюсь! В любом нетривиальном проекте коллизий имен достаточно, чтобы ваше лицо посинело. Пожалуйста, о, пожалуйста, может кто-нибудь придумать решение, которое не требует от меня #undef таких макросов определения в каждом конкретном случае после факта? Я хочу принять утвердительные меры, прежде чем это вызовет какие-либо ошибки .

И я всегда использую Unicode / UTF-16, поэтому в случае CreateFont я бы вызвал CreateFontW прямо в моем коде; Я бы не стал использовать определение макроса. Есть ли у кого-нибудь решение этой проблемы, например, полный заголовок с # undef, который нужно обернуть вместе с windows.h?

Пример ошибки, которая подкрадывается повсюду, - это тот факт, что общее имя вроде "GetMessage ()"

font.cpp(78) : error C2039: 'GetMessageW' : is not a member of 'FontManager'

Когда все, что вам нужно, - это чтобы в вашем классе была функция-член void GetMessage (). Это разочаровывает.

5
задан 6 November 2010 в 04:32
поделиться