#define функция с пространством имен в ней - PullRequest
0 голосов
/ 03 мая 2020

Я работаю с некоторым API, который меняется почти каждый год, и мне нужно перекомпилировать некоторые из моих проектов. Чтобы иметь возможность работать с одним файлом, я хочу переопределить некоторые функции. Вот проблема

#if API_VERSION < 12
#define somenamespace::someNEWfunction() someOLDfuncion()
#define somenamespace::someNEWnamespace                              //replace with nothing
#endif

Итак, у меня две ситуации. Первый - когда у меня есть функция, которая работает точно так же, но была переименована и перемещена в собственное новое пространство имен, поэтому мне нужно просто избавиться от части пространства имен и заменить ее старым именем. И второй случай, когда функция только что переместилась в свое новое пространство имен, но с тем же именем.

Компилятор не позволит мне скомпилировать ее из-за знака ::.

1 Ответ

1 голос
/ 03 мая 2020

Макросы заменяют токены , а не имена.

Вы пытаетесь заменить три токена одновременно (somenamespace, :: и someNEWfunction).

Вы не можете этого сделать.

Вместо этого рассмотрим псевдоним пространства имен .

...