Нет, это невозможно.
Пользуясь некоторым программированием предварительной обработки, я понимаю необходимость: например, для BOOST_PP_FOR_EACH
вы должны передавать макрос, который будет вызываться при каждом повороте цикла, и все же этот макрос полезен только локально, а затем перегружен Ваша таблица символов ... потенциально может вызвать конфликт имен.
Поскольку undef
невозможно, не вызывая макрос, чтобы он не работал, общее решение состоит в том, чтобы дать макросу длинное и громоздкое имя, чтобы вы не столкнулись с риском его повторного использования. имя позже.
Boost имеет очень полезное соглашение об именах:
PROJECT_PATH_FUNCTION
Например, тот самый BOOST_PP_FOR_EACH
, о котором я говорил, можно найти, включив boost/preprocessor/for_each.hpp
.
Явно указав путь, вы не только помогаете людям быстро найти ваш макрос, но и избегаете столкновений, поскольку внутри файла вы можете быстро убедиться, что вы не ошиблись.