Я написал библиотеку C, которая определяет некоторые функции и типы, такие как:
typedef struct {
int i;
} A;
void func1(void);
int func2(A* a);
Теперь я хочу использовать эти функции и создавать переменные типа A
в программе на C ++. К сожалению, в C нет пространств имен, но я все же хотел бы эмулировать некоторую похожую структуру, чтобы избежать конфликтов имен в программе C ++. Однако мне не нравится опция добавления каждой функции и структуры с префиксом:
typedef struct {
int i;
} library_A;
void library_func1(void);
int library_func2(A* a);
Я нашел этот хороший способ эмулировать схему пространства имен путем определения структуры, которая имеет несколько указателей на функции:
/*interface.h*/
struct library {
void (*func1)(void);
void (*func2)(A*);
};
extern const struct library Library;
/* end interface.h */
/* interface.c */
#include "interface.h"
void func1(void)
{
...
}
void func2(A* a)
{
...
}
const struct library Library = {
.func1 = func1,
.func2 = func2,
};
/* end interface.c */
/* C++ program */
#include "interface.h"
int main(void)
{
Library.method1();
A a;
a.i = 5;
Library.method2(&a);
return 0;
}
/* end C++ program */
Можно ли также включить определение типа A
в Library
или иным способом, чтобы тип Library.A
определялся в программе C ++, и я могу написать программу C ++ как
#include "interface.h"
int main(void)
{
Library.method1();
Library.A a;
a.i = 5;
Library.method2(&a);
return 0;
}