将C++引用包装到C API中

Mik*_*hin 4 c c++ reference

我有一个头文件,应该是一个组合的C++和C API.C部分被包装extern "C",但声明本身看起来与C不同; 例如:

foo::Bar& Foo_Baz_GetBarOfQux(void *_self, const foo::Qux &qux);
Run Code Online (Sandbox Code Playgroud)

有没有办法从普通C实际使用它?我显然不能使用这个标题,但也许我可以以某种方式重新声明它:

/* type? */ Foo_Baz_GetBarOfQux(void*, const /* type? */);
Run Code Online (Sandbox Code Playgroud)

令我困惑的是如何声明这些引用的类型(如果可能的话).

PS我知道我可以编写自己的C包装器:我将类声明为不透明结构:

typedef struct foo_bar foo_bar_t;
typedef struct foo_baz foo_baz_t;
typedef struct foo_qux foo_qux_t;
Run Code Online (Sandbox Code Playgroud)

然后编写一个包含上述函数的类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);
}
Run Code Online (Sandbox Code Playgroud)

但我想知道我是否可以Foo_Baz_GetBarOfQux()直接使用原版.

Alo*_*ave 7

不能Foo_Baz_GetBar()直接使用,对成员函数的调用c++涉及隐式传递代码this中不存在的指针c.