У меня есть довольно большой и сложный набор приложений, которые были написаны в более старой версии VC ++.
В нескольких классах нижнего уровня (которые используются везде) есть методы с именем «export ()».
В более поздних версиях C ++ «экспорт» является зарезервированным словом. Зарезервировано, но никогда не используется, и, видимо, никогда не будет.
Есть ли что-то, что я могу сделать в VC ++ 2015, чтобы этот код компилировался без переименования методов?
Мой совет — принять удар и переименовать методы. Это боль, но она сделает ваш код совместимым и переносимым.
Нет никаких законный Кстати, если вы меня поняли: export
был зарезервирован с C ++ 98 и имеет любопытную историю: до C ++ 11 он использовался с шаблонами, а с и с C ++ 11 он не имеет смысла, но все еще зарезервирован. Я представляю что export
приобретет другое значение в будущем стандарте, который поддерживает модули. Так что если вы хотите написать переносимый C ++, вам нужно переименовать методы.
Поведение при изменении поведения зарезервированного слова с помощью #define
является не определено.
Тем не менее, MSVC2015 не претендует на звание компилятора C ++ 11 и слабо говорит о том, что export
это ключевое слово до этого. Так что есть основания для законного использования #define
в вашем конкретном случае: ваш код уже не является переносимым. Вы можете проверить значение __cplusplus
поэтому ваш код не может быть скомпилирован с помощью компилятора C ++ 11 и выше. Это купит вам некоторое время.
Формально это неопределенное поведение, но VC2015 не будет жаловаться: #define export EXPORT
, Или же /D
в качестве настройки проекта.