How to avoid shared_ptr ambiguity? (stl vs boost)
Possible Duplicate:
Why is ‘using namespace std;’ considered a bad practice in C++?
我在代码中使用了stl的shared_ptr很多地方,在我使用shared_ptr的任何地方都使用了以下using语句:
1
| using namespace std::tr1; |
现在我需要使用boost::bimap。因此,我必须在代码中包含以下头文件:
1
| #include <boost/bimap.hpp> |
只要我包含bimap头文件,shared_ptr类型就变得模糊,我必须将shared_ptr的所有用法更改为std::tr1::shared_ptr。因为这会使我的代码变得丑陋,所以我正在寻找一种避免这种歧义的方法,而不需要在任何地方用完全限定的名称声明shared_ptr。我本来想用typedef来代替std::tr1::shared_ptr,但也许还有更好的方法。任何建议都将不胜感激!
- 所以你也有一个提升的使用声明?
- 我们终于明白为什么江户十一〔0〕的指示是国家的祸害。就这样。说。不。
只是不要介绍它。避开一般的using namespace ...。
下面怎么样?
1
| using shared_ptr = std::tr1::shared_ptr; |
但是,正确的答案是不使用using namespace ...语句,或者只使用它来创建名称空间别名。
顺便问一下,你知道EDCOX1的2个字是不是过时了,因为去年C++ 11变成标准化了?
- 我知道,但是由于一些限制,我不能切换到C++ 11。
- 上述using不起作用:error: expected nested-name-specifier before ‘share_ptr’error: expected ‘;’ before ‘=’ token。
- @Meysam您使用的编译器是什么版本?可能它还不支持新的类型别名。
- G++(Ubuntu/Linaro 4.6.1-9Ubuntu3)4.6.1
- 是的,我复制粘贴的。
- @FredOverflow人力资源管理…共享或共享…这真的很重要吗?;)
- 在g++4.7 IIRC之前,不支持模板别名。
- 这在大多数编译器中不起作用