1

我一直ext::hash_map在 C++ 项目中使用,并注意到在 g++ 4.3 中它已被弃用,取而代之的是unordered_map. 我需要保持与不可用的旧系统的兼容性unordered_map。我突然想到,这正是我已经在使用的 autoconf 可以处理的事情。但是,我未能成功找到有关这样做的文档。

我想我需要执行以下操作:
- 将ext::hash_map我的代码中的所有实例替换为 - 将我的代码中的所有MY_HASH_MAP
实例替换为 - 在 configure.ac 中使用和的某种组合包含一行ext/hash_mapMY_HASH_INCLUDE
AC_CHECK_HEADERSAC_DEFINE

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

所以,三个相关的问题:
- 有没有我应该使用的标准方法来处理这个问题?
- 我如何在 autoconf 中做到这一点?
- 我是否应该只使用 -Wno-deprecated 并假设 C++ 标准在我有生之年不会更新?

4

2 回答 2

1

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

于 2009-05-11T23:34:04.723 回答
0

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

IIRC ext::hash_map 无论如何都不是标准的一部分,因此可能造成的主要危害是(最终)G++ 维护者将取消对它的支持。但是,如果您重新调整代码以同时包含 hash_map 和 tr1 unordered_map,您会突然将这段特定代码的测试工作加倍。除非有特定原因可能需要您重复努力,否则将其保存为更有价值的事情。

于 2009-05-11T17:04:37.433 回答