c++ - 有没有办法让 C 预处理器更改我正在使用的 STL 实现?

标签 c++ stl c-preprocessor

我有 C++ 中的代码

#include<vector>

std::vector<double> foo;

我需要为嵌入式平台编译此代码,该平台使用名为 uSTL 的 STL 自定义实现。 .使用它需要 #include ing ustl.h头文件和 all STL classes are defined in another namespace .因此,上面的代码片段应该变成

#include<ustlh.>

ustl::vector<double> foo;

我不想修改源代码,因为它是其他非嵌入式应用程序使用的库代码。我正在考虑使用 C 预处理器来转换 #include<vector>#include<ustl.h>但这似乎是不可能的(宏名称必须是有效的标识符)。

是否有其他方法让 C 预处理器执行此操作?还是有其他不修改原始源代码的方法?

最佳答案

你必须做类似的事情:

#ifdef USE_USTL
#include <ustl.h>
using ustl::vector;
#else
#include <vector>
using std::vector;
#endif

vector<double>  foo;

关于c++ - 有没有办法让 C 预处理器更改我正在使用的 STL 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40820405/

相关文章:

c++ - 如何在 C++ 中计算正整数和负整数之间的 IF 语句中的 bool?

c++ - 如何修复错误 'std::promise<int>::promise(const std::promise<int> &)' : attempting to reference a deleted function

c++ - bool 运算符可以与预处理器一起使用吗?

c++ - 如何解决第三方库中的警告 C4505?

c++ - 如何打印两个数的公倍数?

c++ - 在使用 stop_token 等待条件变量_any 时是否需要拥有锁来请求停止?

c++ - 如何复制到未初始化的 vector 中?

c++ - 使用 std::string 导出类

c++ - C++ 中#define 指令的用途是什么?

计算 C 预处理器中两个代码位置之间的行数