问题
I am having trouble writing C++ code that uses a header file designed for a C file. In particular, the header file used a variable name called class:
int BPY_class_validate(const char *class_type, PyObject *class, PyObject *base_class, BPY_class_attr_check* class_attrs, PyObject **py_class_attrs);
This works in C as class isn't taken as a keyword, but in C++, class is. So is there anyway I can #include this header file into a c++ file, or am I out of luck?
Thank you.
回答1:
try something like this:
#define class class_variable
// if class is only used in declarations, you can also do
// #define class
#include "c.h"
#undef class
it may cause problems, but maybe worth a shot
alternative (using Makefile):
python_.hpp: /usr/include/python.h
perl -pe 's/\Wclass\W//g' $< > $@
...
#include "python_.hpp"
回答2:
If this is declaration only, then the variable names don't matter at all. You can completely remove them or change them how you please. This is because the declaration merely defines the name and type of the function, which is:
int BPY_class_validate(const char *, PyObject *, PyObject *,
BPY_class_attr_check*, PyObject **);
But if you want the names (to be a bit more descriptive), you can just throw an underscore at the end of what you have:
int BPY_class_validate(const char *class_type, PyObject *class_,
PyObject *base_class, BPY_class_attr_check* class_attrs,
PyObject **py_class_attrs);
This won't break any other code.
回答3:
You can always use #ifdef __cplusplus
to create a declaration specific for C++ in that header
回答4:
You will need to modify the header to replace 'class' with something else in order to compile it as C++.
回答5:
As a practical matter, you're out of luck. "class" is a reserved word, you can't use it as a variable identifier.
I suppose you could do preprocessor tricks, like
#define class othername
But really that's silly, too, because it'll make your code confusing and prevent you from using real classes.
Just bite the bullet and rename the parameter 'theclass' or something.
来源:https://stackoverflow.com/questions/2841204/use-the-keyword-class-as-a-variable-name-in-c