我在编写使用为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 ++文件中,或者我运气不好?
谢谢。
答案 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'或其他东西。