0

我正在使用一个名为 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一旦像这样重新定义正常,有没有办法使用它?

4

2 回答 2

1

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

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

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

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

于 2012-03-19T09:08:16.240 回答
1

你可以使用类似的东西:

# if defined (_STLP_REDEFINE_STD)
#   undef  std
#   define std STLPORT
# else

//....

#ifdef std
#define std_WAS_DEFINED
#undef std
#endif

//new code

#ifdef std_WAS_DEFINED
#define std STLPORT
#endif

//legacy code
于 2012-03-19T07:53:04.720 回答