我一直在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_HEADERS
和AC_DEFINE
我无法弄清楚正确的autoconf魔法使这项工作,并想知道它是否是最好的解决方案。当然这是许多其他人会处理的事情,可能有一些我无法找到的标准解决方案?
所以,三个相关的问题:
- 我应该使用一种标准的处理方式吗?
- 我如何在autoconf中执行此操作?
- 我是否应该使用-Wno-deprecated并假设C ++标准不会在我的生命周期内更新?
答案 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,那么您突然将这一特定代码的测试工作量增加了一倍。除非有特殊原因可能需要您重复工作,否则请将其保存为更有价值的内容。