我有一些C代码,其中的某些结构如下所示:
typedef struct my_library_a_t my_library_a_t;
typedef struct my_library_b_t my_library_b_t;
typedef struct my_library_c_t my_library_c_t;
struct my_library_a_t {
struct my_library_b_t {
int data;
struct my_library_c_t {
int data;
} c;
} b;
int data;
};
这在C ++中不起作用,因为在C struct my_library_b_t
中定义了全局struct my_library_b_t
,而在C ++中定义了::my_library_a_t::my_library_b_t
。
如何获取内部结构定义以在C ++中定义全局结构?甚至不必更改太多代码即可工作(我不介意拥有#ifdef __cplusplus
块,但我不想拔出这些结构,因为它们嵌套在第一位的原因是它们每次仅使用一次,并且当内部类定义高于外部类定义时,真的很难阅读
我在定义中尝试了struct ::my_library_b_t
,但这不起作用。
对于上下文,我正在解析一个具有如下定义的字符串:
a = b "," data
b = data "," c
c = data
data = %x31-39 *DIGIT ; 1-9 followed by *(0-9)
/ "0"
并且中间部分具有含义,因此能够具有采用my_library_b_t*
或my_library_c_t*
的函数很有用。
我希望有一个像这样的解决方案:
#ifdef __cplusplus
#define GLOBAL_STRUCT(name) ??? (I tried `:: name`)
extern "C" {
#else
#define GLOBAL_STRUCT(name) name
#endif
struct my_library_a_t {
struct GLOBAL_STRUCT(my_library_b_t) {
// ...
答案 0 :(得分:1)
我推荐这个
struct my_library_a_t {
struct my_library_b_t {
int data;
struct my_library_c_t {
int data;
} c;
} b;
int data;
};
#ifdef __cplusplus
typedef struct my_library_a_t::my_library_b_t my_library_b_t;
typedef struct my_library_b_t::my_library_c_t my_library_c_t;
#else
typedef struct my_library_a_t my_library_a_t;
typedef struct my_library_b_t my_library_b_t;
typedef struct my_library_c_t my_library_c_t;
#endif
请注意,在别名为my_library_b_t之后,您无需使用my_library_a_t :: my_library_b_t :: my_library_c_t