使用Autoconf处理不推荐使用的包含

时间:2009-05-11 16:07:14

标签: c++ hashmap autoconf deprecated unordered-map

我一直在C ++项目中使用ext::hash_map并注意到在g ++ 4.3中它被弃用而不是unordered_map。我需要保持与没有unordered_map可用的旧系统的兼容性。在我看来,这只是autoconf可以处理的事情,我已经在使用了。但是,我没有成功找到这样做的文件。

我猜我需要做以下事情:
   - 使用ext::hash_map替换我代码中MY_HASH_MAP的所有实例    - 使用ext/hash_map替换我代码中MY_HASH_INCLUDE的所有实例    - 使用AC_CHECK_HEADERSAC_DEFINE

的某种组合在configure.ac中添加一行

我无法弄清楚正确的autoconf魔法使这项工作,并想知道它是否是最好的解决方案。当然这是许多其他人会处理的事情,可能有一些我无法找到的标准解决方案?

所以,三个相关的问题:
   - 我应该使用一种标准的处理方式吗?
   - 我如何在autoconf中执行此操作?    - 我是否应该使用-Wno-deprecated并假设C ++标准不会在我的生命周期内更新?

2 个答案:

答案 0 :(得分:1)

您可以使用AC_CHECK_HEADERS([my_header_file])查看哪些文件存在 - 然后创建一个新的class MyApp::hash_map,这取决于使用的定义如何相应地包装功能。

答案 1 :(得分:0)

我会考虑将代码保留原样并关闭“弃用”警告,特别是如果您必须支持只有ext :: hash_map可用的旧系统。

IIRC ext :: hash_map无论如何都不是标准的一部分,因此可能造成的主要危害是(最终)G ++维护者将删除对它的支持。但是,如果您重新设置代码以包含hash_map和tr1 unordered_map,那么您突然将这一特定代码的测试工作量增加了一倍。除非有特殊原因可能需要您重复工作,否则请将其保存为更有价值的内容。