在stlport库中,我看到了以下代码:
namespace std { }
namespace __std_alias = std;std命名空间无效?发布于 2012-02-28 21:15:45
在声明别名之前,您需要名称空间“在作用域中”。空的namespace std {}通知编译器该命名空间已存在。然后他们可以为它创建一个别名。
除了创建快捷方式之外,创建别名还有其他原因。例如,您可以定义一个宏来“重命名”名称空间--考虑#define std STLPORT_std的影响。拥有别名允许您访问原始名称空间,前提是您使用头文件进行正确的排序游戏。
发布于 2012-02-28 21:21:27
::std以外的名称空间中(通过将__std_alias更改为其他别名)。例如,如果您想要同时测试两个实现,这将非常有用。发布于 2012-02-28 21:43:05
得到一个编译器错误是相当烦人的,因为没有像std这样的名称空间...编译器是怎么想的?它当然存在!
是的,确实如此,但是对于库功能,必须首先声明它。这就是第一行正在做的事情。
通过重命名__std_alias,它允许它们为名称空间赋予新的别名。有一天,您可能会决定在自己的代码中执行此操作。
也许您希望在代码中使用shared_ptr,但又不希望将代码专用于使用命名空间boost或std。因此,您可以创建一个别名,并将其“指向”boost或std。boost库中的其他功能也是如此,这些功能后来成为标准。
这并不意味着您必须将此名称空间用于所有内容,因为您可以有多个别名,并且可以有多个别名指向同一个真实的名称空间。
假设我们想要调用我们的智能指针库sml。我们可以做到
namespace sml = boost; // or std在代码中的一个位置,并从代码中的该点开始#include <boost/shared_ptr.hpp> (相同的标头)。
在我们的代码中的其他地方,我们使用sml::shared_ptr。如果我们从boost切换到std,只需更改一个头文件,而不是所有代码。
https://stackoverflow.com/questions/9482571
复制相似问题