为什么我应该用c ++而不是c来设置插件接口

phl*_*psy 6 c c++ plugins

由于我之前的 问题,我问自己:为插件系统设置C++接口是否有用?以下几点是针对它的:

  • 不同编译器及其版本之间没有共同的ABI,内存中没有对象的共同布局
  • 没有直接的班级出口.你必须出口工厂和析构工具.如果您的对象由仅包含delete它们的其他对象(例如智能指针)保持,则会出现问题.
  • STL的不同实现,你不能传递std::list<T>给插件
  • 不同版本的二手库,如Boost

如果你克制自己的C++语言的其余部分,你几乎最终得到"C子集".有没有关于使用C++的观点?Qt-Toolkit如何解决上述问题?

备注:我主要指的是Linux系统.不过我对其他平台上的解决方案感兴趣.

其他问题:使用C接口有什么问题?structs 的内存布局?应该避免C的哪些语言部分?

Éri*_*ant 6

虽然这更像是关于"如何"而不是"为什么",但您可能对(尚未)Boost.Extension库以及该主题的作者博客感兴趣.

对于"为什么"部分,我的2(加拿大)美分:它取决于受众(插件编写者)以及应用程序与其插件之间的接口丰富程度:

  • 如果受众是大型或异构的,C++插件系统的局限性(保持插件端和应用程序端与编译器和库版本同步)变得不切实际,并且C接口更易于维护.如果观众很小,同质或受你的控制,这些问题就不那么重要了.
  • 如果界面很丰富(在"富"的精确含义上挥手),C接口可能会变得很麻烦,并且平衡在C++端倾斜.

然而,第一个标准(观众)更为重要,因此只有当观众是同质的并且界面显着受益于表达性收益时,C++界面才有意义.