我使用MS VC 2008和对某些项目英特尔C ++编译器11.0。是否值得在生产中使用TR1的功能?他们将在新的标准留?

例如,现在我使用stdext::hash_map。 TR1定义std::tr1::unordered_map。但是,在MS执行unordered_map只是他们的stdext::hash_map,以另一种方式的模板化。

有帮助吗?

解决方案

我的建议是使用一个别名包含您使用TR1项目的命名空间。这样一来,你就可以从当你的编译器支持它使用TR1版升级到标准版“移动”。

namespace cpp0x = std::tr1;

cpp0x::unordered_map<std::string, int> mymap;

有一个C ++编译器0X,第一行就变成:

namespace cpp0x = std;

,你可以独自离开休息。

其他提示

  

是的,一切的在TR1会   留在这。有些事情会   接受的std ::,但他们会留下来   在TR1也。所以,没有你的代码   将打破一旦新标准   结束。

请原谅我:不,他们不会。如所描述的此处

  

二笔记已被添加到要清楚用户在从TR到未来标准的过渡,在TR组件将不会留在命名空间中的std :: TR1和配置宏会消失的建议。

但值得注意的是,编译器厂商愿意现在支持TR1,将最有可能不是从你的脚下拉在地上,并为您提供某种形式的过渡方法。

unordered_map将在新的标准,hash_map不会。注意,tr1命名空间不标准要么。

绝大多数的库代码,将C ++ 0x中加入已经存在了在相当长的一段Boost C ++库。我会强烈建议使用Boost(即的boost :: unordered_map ),因为它工作在一个非常大的数字ISO C ++编译器1998年,并会继续努力(可能使用编译器的内置实现)上的C ++ 0x编译器。此外,您不需要更改命名空间 - 而被批准将被转移到性病性病:: TR1的项目 - 因为它总是会在升压::可用,您将不必担心关于哪些Tr1的元件已经使它成为标准。总之,升压是要走的途径。

对于tr1::unordered_map注意,有可能哈希映射的许多不同的实现方式,并通过标准的选举实现相当经典......但可能不是最成效,为特定的任务。

不幸的是,标准并没有要求多种策略来实现(虽然我想这将需要相当多的工作)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top