Answers:
这确实意味着您的库中作为接口公开的部分仅使用语言的C“部分”,因此您不会导出类或类似的类,而仅导出函数,POD和包含POD的结构。另外,您必须禁用C ++名称修饰,通常通过将功能标记为来实现extern "C"
。一个典型的例子是:
extern "C" void foo(int bar);
以这种方式公开库的最大优点是,几乎每种编程语言都具有直接与C库接口的机制,但是只有极少数人可以直接与C ++库接口。因此,从这个意义上讲,您选择了最小的公分母来简化他人使用您的库的工作。
但是请记住,如果您正在创建供其他人使用的库,那么这实际上只是一个有用的策略。如果您正在构建一个仅C ++的软件,并且这些库仅需要相互连接,则(IMHO)最好公开适当的C ++ API,以便可以充分利用该语言的功能。
extern "C"
我没得到的东西的例子吗?
.hpp
,但是此扩展名表示“ C ++头文件”,因此应为.h
,用于C和C ++。
除了Timo的回答之外-在某些平台上(例如Windows-诸如广泛采用的Mac OS X的Linux),没有标准化的C ++ ABI,因此,这不仅是缺少功能的问题,而且也不可能实现该功能。
例如,IIRC MSVC在每个版本中都有不同的ABI,并且它可能是调试版本还是发行版本,因此可能会发生变化-并且未发布,因此第三方编译器通常不兼容(我读到一些信息,指出icc的某些版本与MSVC兼容2005年,但可能是根据NDA披露的信息-诸如Python的创建者没有必要使用并使用自己的ABI。因此在实践中,语言环境不仅会限制编译器版本,还会限制标志。
最后,C ++具有更多的编译时功能。例如,泛型通常不存在于动态类型语言等中。