我可以在C程序中使用C++库吗?
答
是的,只要你使用C++编译器编译它。请注意,这不再使它成为一个C程序,而是一个C++程序。
答
如果你的编译器编译C++,你可以。我会说在大多数编译器的情况下,特别是如果你使用gcc的话。
大多数IDE允许您创建一个新的C++应用程序,然后您可以使用纯C编写代码并在需要时使用C++对象。
你可以做到这一点,因为C++是C的超集,这意味着C++包括所有的C'S功能,并增加了对C.
答
std::vector
的顶部更多的功能是一个模板类。它依赖于C++提供给存在的特殊语法。
您可以用的,一个opaque pointer各地传递给vector
功能的集合来包装它的功能,在处理vector
类自己的分配成本。
我会建议反对它,因为你会介绍不必要的复杂性与可疑的利益。当你需要使用C++构造时,只需编写C++,并在声明extern "C"
的函数后面抽象。
答
不是std::vector
,no。任何模板化的东西都是正确的。
一般来说,使用C++代码并不好玩,但它可以完成。你不得不用C#代码可以调用的简单的非类函数来包装类,因为C没有做类。为了使这些函数可以从C中使用,你可以用一个extern "C"
声明来包装它们,以告诉C++编译器不要进行名称修改。
然后,您可以用C++编译器编译包装函数,并创建一个C程序可以链接的库。这里有一个非常简单的例子:
// cout.cpp - Compile this with a C++ compiler
#include <iostream>
extern "C" {
void print_cout(const char *str) {
std::cout << str << std::endl;
}
}
/* print.c - Compile this with a C compiler */
void print_cout(const char *);
int main(void) {
print_cout("hello world!");
return 0;
}
然后你需要将C++库链接到我假设的应用程序。例如通过使用g ++而不是gcc进行最终链接。我认为这很狡猾。 – elcuco 2009-11-01 19:36:13
John答案很好。但是将C++和C代码连接起来可能很困难。 我建议在这里使用动态库(.so或.dll) – toto 2009-11-02 16:54:24