c++ - 将 C++11 转换为等效的 C++98 代码

标签 c++ c++11 c++98

<分区>

我想使用 C++11,但不幸的是,为了确保与某些专有库的二进制兼容性,我必须确保可以使用仅支持 C++98 的编译器构建代码。有没有办法将某些 C++11 构造(至少是那些不需要标准库支持的构造)转换为它们的 C++98 等效项?

例如:

std::vector<int> v = ...;
for (auto &i : v)
    std::cout << i << ' ';

转换为

std::vector<int> v = ...;
for (std::vector<int>::iterator it = v.begin(), end = v.end(); it != end; ++it) {
  int &i = *it;
  std::cout << i << ' ';
}

或类似的东西。

最佳答案

可以使用 LibTooling 创建源到源编译器(Clang 项目的一部分,它专门用于编写高级工具)自动且正确地执行此转换(例如,与在 Perl 中编写您自己的解析器相反)。

请注意,有些 C++11/14 结构无法像范围 for 循环那样轻松转换为 C++98/03 代码。我想到了 Variadic 模板等。

关于c++ - 将 C++11 转换为等效的 C++98 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26266771/

相关文章:

c++ - 在 C 中,两个假(零)可以一起为真吗?

c++ - 从动态库 : Debug vs Release 加载 Fortran 函数

c++ - 停止 C++98 和 C++11 的隐式转换

c++ - 空间如何分配 char* 数组?

c++ - Boost Locale 翻译入门

c++ - 未初始化的本地自动数组 C++

c++ - 在模板类之外的容器类型上编写模板化成员函数

c++ - 带有适用于 iOS 的 libstdc++ 的 OpenCV 2.4.3+?

c++ - 无法理解此语句 - 运算符后的返回类型

c++ - Lambda表达式可以降级到C++ 98吗