我们如何将Lua粘合到C ++代码?

时间:2020-03-06 14:26:44  来源:igfitidea点击:

我们是否使用Luabind,toLua ++或者其他某个库(如果是,则使用哪个库)或者根本不使用?

对于每种方法,优点和缺点是什么?

解决方案

要部分回答我自己的问题:

Luabind:一旦我们知道如何通过这种尴尬的模板语法来绑定方法和类,添加新绑定就非常简单明了。但是,luabind会对性能产生重大影响,因此不应将其用于实时应用程序。比调用直接操作堆栈的C函数大约高出5到20倍的开销。

我不使用任何图书馆。一段时间之前,我曾使用SWIG公开了C库,但是开销太大,因此我不再使用它。

优点是更好的性能和更多的控制权,但是需要花费更多的时间来编写。

使用原始的Lua API进行绑定-并使它们保持简单。从API本身(AUX库)和Lua作者的库中获得启发。

通过一些实践,原始API是最佳选择-最大的灵活性和最小的不必要开销。我们已经拥有了想要的东西,而没有想要的方式。

如果我们必须绑定大型第三方库,请使用自动生成器(例如tolua,tolua ++)(或者针对特定情况自行滚动)。它将使我们从手工工作中解放出来。

我不建议使用Luabind。目前,它的发展停滞了(但是开始恢复生机),如果我们遇到一些极端情况,我们可能会独自一人。 Luabind也大量使用模板元编程。根据观点,这可能(也可能不是)是不可接受的。

我真的不同意"自己动手"表决,将基本类型和静态C函数绑定到Lua是微不足道的,是的,但是当我们开始处理表和元表时,情况就改变了。事情变得非常棘手。

LuaBind似乎可以胜任这项工作,但是我对此有一个哲学问题。对我来说,如果类型已经很复杂,那么Luabind是高度模板化的事实并不会使代码更容易遵循,正如我的一个朋友说的那样:"我们将需要Herb Shutter来找出编译消息" 。加上它取决于Boost,加上编译时间受到严重打击,等等。

在尝试了几次绑定之后,Tolua ++似乎是最好的。 Tolua在开发中似乎并不是很多,因为Tolua ++似乎可以很好地工作(加上一半的" Tolua"教程,事实上,还有" Tolua ++"教程,请相信我:) Tolua确实产生了东西,源代码可以修改,并且似乎可以处理复杂的情况(例如模板,联合,无名结构等)

Tolua ++的最大问题似乎是缺少适当的教程,预先设置的Visual Studio项目,或者遵循命令行有点棘手的事实(路径/文件不能有空格-至少在Windows中如此)依此类推)对我来说还是赢家。