是否可以使用C语言的Boost.DateTime库,如果有的话,是否有任何可用的示例(最好使用gcc类型的工具涵盖构建过程(?我已经搜索了 Boost 文档和互联网,理论上似乎是可行的,但无论如何都没有找到任何明确的答案。
C 和 C++ 具有高度的互操作性;从 C++ 调用 C 代码是微不足道的;然而,从 C 调用C++代码受到更多限制,因为接口必须具有 C 链接并且仅包含 C 中可用的类型,并且不能使用C++特定功能,例如默认参数或函数重载。
要在 C 中使用C++代码需要接口具有extern "C"
链接规范,该规范本身不是有效的 C,因此任何头文件中的规范必须是有条件的,例如:
// interop.h
#if !defined INTEROP_H
#define INTEROP_H
#if defined __cplusplus
extern "C"
{
#endif
// C interface here
void somefunction() ;
#if defined __cplusplus
}
#endif
#endif // INTEROP_H
然后接口本身的实现将是C++代码:
// interop.cpp
#include "interop.h"
void somefunction()
{
// C++ code here callable from C through somefunction()
}
但是该接口可以从 C 代码调用:
// notcpp.c
#include "interop.h"
int main()
{
somefunction() ;
}
这种方法在界面简单的情况下很好,因此,例如,如果您将 Boost 日期/时间库用于某些非常具体的过程,其结果可以用 C 表示,那么如果单独在 C 中实现等效功能可能会令人望而却步,这可能是合适的。 但是为整个C++类创建 C 包装器非常耗时、容易出错、不灵活且最终毫无意义 - 通常将 C 代码编译为C++然后互操作性障碍消失,因为您可以将特定代码直接引入C++现有代码库中(尽管此后永远无法将其编译为 C(。 C++是多范式的,在其自己的C++库中包含 C 库,并且大多数第三方和 OS C 库标头已经包含C++条件 C 链接包装器,因此如果您只想利用更大的库生态系统,则无需以 OOP 样式重写所有代码即可使用C++。
No.Boost是一个C++库,Boost.DateTime也不例外。如果您查看任何 DateTime 标头,您会发现C++功能无处不在,从类到模板再到命名空间等等 - C 不支持这些功能。
但是,您可以在C++中创建一个包装库,它将所需的功能公开为纯 C 函数,然后从 C 调用这些功能。