Обработка устаревших включений с помощью Autoconf - PullRequest
1 голос
/ 11 мая 2009

Я использовал ext::hash_map в проекте C ++ и заметил, что в g ++ 4.3 он устарел в пользу unordered_map. Мне нужно поддерживать совместимость со старыми системами, у которых нет unordered_map. Мне приходит в голову, что это как раз то, что может быть обработано autoconf, который я уже использую. Однако мне не удалось найти документацию по этому вопросу.

Я бы предположил, что мне нужно сделать что-то вроде следующего:
- Заменить все экземпляры ext::hash_map в моем коде на MY_HASH_MAP
- Заменить все экземпляры ext/hash_map в моем коде на MY_HASH_INCLUDE
- Включите строку в файл configure.ac, используя комбинацию AC_CHECK_HEADERS и AC_DEFINE

.

Я не смог точно определить правильную магию автоконфинга, чтобы заставить это работать, и мне интересно, является ли это даже лучшим решением в любом случае. Конечно, с подобными вещами придется столкнуться многим другим людям, и может быть какое-то стандартное решение, которое мне не удалось найти?

Итак, три связанных вопроса:
- Есть ли стандартный способ обработки этого, который я должен использовать?
- Как мне это сделать в autoconf?
- Должен ли я просто использовать -Wno-deprecated и предположить, что стандарт C ++ не будет обновляться при моей жизни?

Ответы [ 2 ]

1 голос
/ 12 мая 2009

Вы можете использовать AC_CHECK_HEADERS([my_header_file]), чтобы увидеть, какие файлы присутствуют, а затем создать новый class MyApp::hash_map, который в зависимости от того, как используются определения, соответствующим образом оборачивает функциональность.

0 голосов
/ 11 мая 2009

Я хотел бы рассмотреть вопрос о том, чтобы оставить код как есть и вместо этого отключить предупреждение «устарело», особенно если вам необходимо поддерживать старые системы, в которых доступно только ext :: hash_map.

IIRC ext :: hash_map в любом случае не является частью стандарта, поэтому основной вред, который может быть нанесен, заключается в том, что (со временем) сопровождающие G ++ уберут его поддержку. Однако если вы перенастроите код, включив в него hash_map и tr1 unordered_map, вы неожиданно удвоите усилия по тестированию этого конкретного фрагмента кода. Если нет конкретной причины, которая может потребовать от вас дублирования усилий, сохраните их для чего-то более стоящего.

...