在c程序中,我想运行c ++库函数,但我不知道怎么能这样做。像c ++程序员一样,我知道如何在c ++ prog下使用c程序。因此,我想知道有可能在c?中使用c ++库函数,即cout,vector等。
答案 0 :(得分:5)
通常,您不能在C中使用C ++工具。
但是,C ++库可以通过声明它们extern "C"
来选择将其某些功能导出到C程序。如果您的C ++库不这样做,您将不得不编写一些包装器(在C ++中)来执行此操作。
请注意,此类导出功能必须符合C的限制。例如,您不能使用非POD类型,函数重载,运算符重载,转换运算符,RTTI,异常,模板等。
答案 1 :(得分:1)
正如Chris Jester-Young所说,你不能直接使用它们。但是你可以用C ++编写包装器,将函数导出为普通的c函数。
基本上你编写了一个Create-Method(例如CreateVector),它返回一个句柄(例如this指针作为int),一个Destroy-Method(例如DestroyVector),它接受句柄并删除对象。然后你必须包装对象的每个成员方法。包装器方法具有相同的签名,除了它需要一个额外的参数 - 句柄。
这是 - 取决于要包装的方法的数量 - 大量的重复性工作。但这很容易上班。有关“使用句柄在C中进行面向对象编程”的示例,请查看Windows-API。
答案 2 :(得分:0)
您必须围绕要使用的C ++函数创建extern "C"
包装函数。此步骤要求您手动选择所需功能的名称。
//Header file:
#ifdef __cplusplus
extern "C" {
#endif
int *find_int( int *first, int *last, int value );
#ifdef __cplusplus
}
#endif
//C++ source file:
int *find_int( int *first, int *last, int value ) {
return std::find( first, last, value );
}
将其编译成一个库(静态或动态),或者只是将其与项目中的C源代码放在一起,具体取决于构建环境的工作原理。