2009-05-11 2 views
1

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

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

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

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

ответ

0

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

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

1

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

Смежные вопросы