У меня есть файл заголовка для того, что должно быть комбинированным C ++ и C API. Часть C обернута в extern "C"
, но сами объявления очень похожи на C; например:
foo::Bar& Foo_Baz_GetBarOfQux(void *_self, const foo::Qux &qux);
Есть ли способ на самом деле использовать его из простого C? Я, очевидно, не могу использовать этот заголовок, но, возможно, я могу как-то его переопределить:
/* type? */ Foo_Baz_GetBarOfQux(void*, const /* type? */);
Что меня озадачивает, так это то, как объявлять типы этих ссылок (если это возможно).
P.S. Я знаю, что могу написать свою собственную оболочку C поверх этого: я объявляю классы непрозрачными структурами:
typedef struct foo_bar foo_bar_t;
typedef struct foo_baz foo_baz_t;
typedef struct foo_qux foo_qux_t;
и затем напишите C-подобную функцию, которая обернет вышеупомянутую функцию:
extern "C"
foo_bar_t*
foo_baz_get_bar_of_qux(
foo_baz_t* baz,
foo_qux_t* qux)
{
return (foo_bar_t*) Foo_Baz_GetBarOfQux(baz, *(foo::Qux*)qux);
}
Но мне интересно, могу ли я использовать оригинал Foo_Baz_GetBarOfQux()
напрямую.