2009-05-11 7 views
1

J'ai utilisé ext::hash_map dans un projet C++ et notez que dans g ++ 4.3 il est obsolète en faveur de unordered_map. Je dois maintenir la compatibilité avec les vieux systèmes qui n'ont pas unordered_map disponible. Il me semble que c'est juste le genre de chose qui pourrait être géré par autoconf, que j'utilise déjà. Cependant, je n'ai pas réussi à trouver de la documentation à ce sujet.Traitement obsolète inclut avec Autoconf

Je suppose que je dois faire quelque chose comme ce qui suit:
- Remplacer toutes les instances de ext::hash_map dans mon code avec MY_HASH_MAP
- Remplacer toutes les instances de ext/hash_map dans mon code avec MY_HASH_INCLUDE
- Inclure une ligne configure.ac en utilisant une combinaison de AC_CHECK_HEADERS et AC_DEFINE

Je n'ai pas été capable de comprendre exactement la magie autoconf appropriée pour faire ce travail, et je me demande si c'est même la meilleure solution de toute façon. C'est sûrement le genre de choses que beaucoup d'autres personnes auront traitées et il y aura peut-être une solution standard que je n'ai pas trouvée. Donc, trois questions connexes:
- Existe-t-il une façon standard de gérer cela que je devrais utiliser?
- Comment faire cela dans autoconf?
- Dois-je simplement utiliser -Wno-deprecated et supposer que le standard C++ ne sera pas mis à jour au cours de ma vie?

Répondre

0

J'envisagerais de laisser le code tel quel et de désactiver l'avertissement 'deprecated' à la place, surtout si vous devez supporter des systèmes plus anciens où vous avez seulement ext :: hash_map disponible. IIRC ext :: hash_map ne fait pas partie de la norme de toute façon, donc le principal inconvénient qui pourrait être fait est que (finalement) les mainteneurs G ++ supprimeront le support pour cela. Cependant, si vous modifiez le code pour inclure à la fois hash_map et tr1 unordered_map, vous avez soudainement doublé l'effort de test pour ce bit de code particulier. Sauf s'il y a une raison spécifique qui pourrait vous obliger à dupliquer l'effort, enregistrez-le pour quelque chose de plus intéressant.

1

Vous pouvez utiliser AC_CHECK_HEADERS([my_header_file]) pour voir quels fichiers sont présents - puis créer un nouveau class MyApp::hash_map qui, selon la définition utilisée, enveloppe la fonctionnalité en conséquence.