首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中使用关键字class作为变量名

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

Stack Overflow用户
提问于 2010-05-16 02:11:31
回答 5查看 4.7K关注 0票数 11

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

代码语言:javascript
复制
int BPY_class_validate(const char *class_type, PyObject *class, PyObject *base_class, BPY_class_attr_check* class_attrs, PyObject **py_class_attrs);

这在C中是可行的,因为class不是关键字,但在C++中,class是关键字。那么有没有什么办法可以将这个头文件包含到一个c++文件中,或者我是不是不走运?

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-05-16 02:15:53

尝试如下所示:

代码语言:javascript
复制
#define class class_variable
// if class is only used in declarations, you can also do
// #define class
#include "c.h"
#undef class

这可能会带来问题,但也许值得一试。

替代(使用Makefile):

代码语言:javascript
复制
python_.hpp: /usr/include/python.h
    perl -pe 's/\Wclass\W//g' $< > $@
...

#include "python_.hpp"
票数 11
EN

Stack Overflow用户

发布于 2010-05-16 02:25:19

如果这只是声明,那么变量名就无关紧要了。你可以完全删除它们,或者随心所欲地更改它们。这是因为声明仅定义了函数的名称和类型,即:

代码语言:javascript
复制
int BPY_class_validate(const char *, PyObject *, PyObject *,
                        BPY_class_attr_check*, PyObject **);

但是如果你想要名字(更具描述性),你可以在你所拥有的东西的末尾加上一个下划线:

代码语言:javascript
复制
int BPY_class_validate(const char *class_type, PyObject *class_,
                        PyObject *base_class, BPY_class_attr_check* class_attrs, 
                        PyObject **py_class_attrs);

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

票数 8
EN

Stack Overflow用户

发布于 2010-05-16 02:15:19

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2841204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档