是否可以将C ++实现为带有宏的C库?

时间:2016-04-20 19:31:12

标签: c++ c macros

理论上可以使用具有正确宏的C库来实现C ++关键字,类语法等吗? (即准备一个库,使用C编译器编译任何C ++代码)。我猜答案可能是“不”,但我想知道你是否可以证明这一点。

4 个答案:

答案 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 ++前端可能会做这样的事情。分叉并修复它。