在C ++中使用关键字class作为变量名

我在编写使用为C文件设计的头文件的C ++代码时遇到问题。 特别是,头文件使用了一个名为class的变量名:

int BPY_class_validate(const char *class_type, PyObject *class, PyObject *base_class, BPY_class_attr_check* class_attrs, PyObject **py_class_attrs); 

这适用于C,因为类不作为关键字,但在C ++中,类是。 那么无论如何我可以#include这个头文件到一个c ++文件,或者我运气不好?

谢谢。

尝试这样的事情:

 #define class class_variable // if class is only used in declarations, you can also do // #define class #include "ch" #undef class 

它可能会导致问题,但也许值得一试

替代(使用Makefile):

 python_.hpp: /usr/include/python.h perl -pe 's/\Wclass\W//g' $< > $@ ... #include "python_.hpp" 

如果这只是声明,则变量名称根本不重要。 您可以完全删除它们或按您喜欢的方式更改它们。 这是因为声明只定义了函数的名称和类型,即:

 int BPY_class_validate(const char *, PyObject *, PyObject *, BPY_class_attr_check*, PyObject **); 

但是如果你想要这些名字(更具描述性),你可以在你拥有的名字的末尾抛出一个下划线:

 int BPY_class_validate(const char *class_type, PyObject *class_, PyObject *base_class, BPY_class_attr_check* class_attrs, PyObject **py_class_attrs); 

这不会破坏任何其他代码。

您始终可以使用#ifdef __cplusplus在该标头中创建特定于C ++的声明

您需要修改标头以用其他东西替换’class’,以便将其编译为C ++。

实际上,你运气不好。 “class”是保留字 ,不能将其用作变量标识符。

我想你可以做预处理器技巧,比如

 #define class othername 

但实际上这也很愚蠢,因为它会让你的代码混乱并阻止你使用真正的类。

只需咬住子弹并重命名参数’theclass’或其他东西。