理论上可以使用具有正确宏的C库来实现C ++关键字,类语法等吗? (即准备一个库,使用C编译器编译任何C ++代码)。我猜答案可能是“不”,但我想知道你是否可以证明这一点。
答案 0 :(得分:4)
C没有函数重载,但是C ++没有。
在我看来,用C:
编译这个简单的C ++代码可能是不可能的bool Add(int a, int b);
bool Add(string a, string b);
(两个重载函数:相同名称,不同参数,不同实现)
C会报告类似于“重新定义现有功能”的错误 C ++会编译它没有任何问题。
答案 1 :(得分:2)
没有
对于特定证明,请考虑此模板。
template<size_t n>
struct fact {
static const int value = n * fact<n-1>::value;
};
template<>
struct fact<0> {
static const int value = 1;
};
即使您可以编写一个非常复杂的预处理宏来将其转换为C,预处理器也只运行一次。它不会循环或以递归方式运行(此模板定义需要正常运行。)因此,您无法仅在C中使用宏实现此模板。
你可以做一个C ++的子集,但预处理器从根本上不适合这种情况。
编辑:Re:Boost.Preprocessor。迭代在Boost.Preprocessor中伪造。在所有情况下都存在256的迭代限制,这是因为预处理器使用重复调用伪造循环。有关示例,请参阅boost / repeatition / for.hpp。
答案 2 :(得分:2)
模板机制已完成。宏处理器不是。 /故事
答案 3 :(得分:0)
运算符重载可能代表一个问题。 你可以使用代码生成,g ++前端可能会做这样的事情。分叉并修复它。