我正在使用一个名为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/