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

时间:2010-05-15 18:11:31

标签: c++ c keyword header-files

我在编写使用为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 ++文件中,或者我运气不好?

谢谢。

5 个答案:

答案 0 :(得分:9)

尝试这样的事情:

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

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

替代(使用Makefile):

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

#include "python_.hpp"

答案 1 :(得分:7)

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

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);

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

答案 2 :(得分:3)

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

答案 3 :(得分:3)

您需要修改标题以将“class”替换为其他内容,以便将其编译为C ++。

答案 4 :(得分:1)

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

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

#define class othername

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

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