C++ 如何避免共享的ptr歧义?(stl vs boost)

C++ 如何避免共享的ptr歧义?(stl vs boost),c++,ambiguity,C++,Ambiguity,可能重复: 我在我的代码中使用了stl的shared\u ptr很多地方,我在使用shared\u ptr的任何地方都使用了以下语句: using namespace std::tr1; 现在我需要使用boost::bimap。因此,我必须在代码中包含以下头文件: #include <boost/bimap.hpp> #包括 只要我包含bimap头文件,shared_ptr类型就变得不明确,我必须将shared_ptr的所有用法更改为std::tr1::shared_ptr。

可能重复:

我在我的代码中使用了
stl
shared\u ptr
很多地方,我在使用
shared\u ptr
的任何地方都使用了以下
语句:

using namespace std::tr1;
现在我需要使用
boost::bimap
。因此,我必须在代码中包含以下头文件:

#include <boost/bimap.hpp>
#包括

只要我包含
bimap
头文件,
shared_ptr
类型就变得不明确,我必须将
shared_ptr
的所有用法更改为
std::tr1::shared_ptr
。由于这使得我的代码很难看,我正在寻找一种避免这种歧义的方法,而无需使用完全限定的名称声明
shared\u ptr
where。我在考虑使用
typedef
进行
std::tr1::shared\u ptr
,但也许还有更好的方法。任何建议都将不胜感激

不要简单地介绍它。避免使用名称空间进行常规的

以下内容如何:

using shared_ptr = std::tr1::shared_ptr;
但是,正确的答案是不使用
usingnamespace…
语句,或者只使用它来创建名称空间别名


顺便说一句,你知道自从去年C++11标准化以来,
std::tr1
就被禁止了吗?

所以你也有一个boost的使用声明?我们终于明白了为什么
使用指令是国家的祸害。只是说。没有。我知道,但是由于一些限制,我还不能切换到C++11。而且上面使用的
不起作用:
错误:在'share_ptr'之前应该有嵌套的名称说明符。
错误:应该是';'“=”标记之前
@Meysam您使用的是什么编译器及其版本?它可能还不支持新的类型别名。g++(Ubuntu/Linaro 4.6.1-9ubuntu3)4.6.1模板别名在g++4.7 IIRC之前不受支持。