我想使用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 << ' ';
}
或类似的东西。
答案 0 :(得分:2)
可以使用LibTooling创建源到源编译器(Clang项目的一部分,它专门用于编写高级工具)自动正确地执行此转换(而不是在Perl中编写自己的解析器,例如)。
请注意,有些C ++ 11/14结构不能像范围的for循环一样容易地转换为C ++ 98/03代码。我想到了变量模板等。
答案 1 :(得分:1)
有一个工具可以转换为C. 如果您的问题只是编译器支持,并且您不需要非常易读的输出,那就足够了。
https://www.edg.com/index.php?location=c_frontend
https://www.edg.com/index.php?location=faq_q6_convert
P.S。你没有要求便宜: - )