我正在使用一个名为stlport的库,它重新定义std命名空间,如下所示:

# if defined (_STLP_REDEFINE_STD)
/*  We redefine "std" to "stlport", so that user code may use std:: transparently */
#   undef  std
#   define std STLPORT
# else


因此,无论我在我的代码中什么地方尝试使用std::something,它都将替换为_STLP::something

如果我注释掉#define std STLPORT行,则旧项目的代码将无法编译(取决于stlport)。

如果我不加注释,我尝试添加的新库将无法编译,因为它使用std::以及与stlport使用不同的分配器集。输入冲突。

在包含新库之前,我曾在一行中尝试过#define STLPORT std,但是此#define似乎不起作用。

一旦像这样重新定义普通的std,是否有办法使用它?

最佳答案

您有两种不同的STL实现,一种在STLPORT中,一种在标准库中。您的旧代码需要STLPORT,而新代码则需要标准库。

新代码和旧代码都使用include <vector>之类的东西,但是它们需要不同的名为vector的包含文件,因此需要不同的-I编译器标志。您不能使用相同的编译器设置来编译它们。

如果不需要在新旧代码之间交换标准容器和其他与STL相关的数据,则可以使用STLPORT设置编译旧代码,并使用常规设置编译新代码。不要触摸STLPORT include,不要在代码中重新定义std。 STLPORT并非旨在那样使用。它旨在替代标准库(的一部分)。您通过选择正确的编译器标志而不是通过修改您的(或STLPORT)源来选择要使用的标志。

如果确实需要在新旧代码之间交换标准容器,那么您会很不幸。您唯一的办法是修改遗留代码,使其符合标准。

关于c++ - 修改名称后,如何恢复为原始 namespace ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9766132/

10-09 06:54