鉴于以下C++代码,
#ifdef __cplusplus
extern "C" {
#endif
struct foo {
void getNum() {
}
};
#ifdef __cplusplus
}
#endif
int main (int argc, char * const argv[]) {
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
可以getNum()从C 打电话吗?
不,因为它getNum是一个成员函数,C没有.
该问题的一个可能的解决方案是编写一个C++函数来将一个foo实例作为一个foo*(其中foo被改为一个空结构)返回给C(我假设这是二进制编译为C链接到的C++),然后有一个免费的在C++中调用的函数foo_getNum或者是某个东西,它调用它foo*(其定义被修改为C版本为空)调用getNum它.显然,它不是类型安全的(但是foo*当foo空的时候采取偶数会比void*- 感谢大卫更好).
该extern "C"对构件功能没有影响: getNum()具有C++语言联动.
C++语言标准规定(C++03§7.5/ 4):
对于类成员的名称和类成员函数的成员函数类型,将忽略AC语言链接.
所以,不,你不能直接从C程序调用这个函数(但是,正如其他人所说的那样,你无法将该代码编译为C,因为C没有成员函数).当然可以想象,某些实现可能允许您通过某种特定于实现的方法从C程序调用此函数.
| 归档时间: |
|
| 查看次数: |
4219 次 |
| 最近记录: |