嵌入式Lua和重载的C ++运算符

时间:2010-12-23 09:47:20

标签: c++ lua

我在我的C ++应用程序中嵌入了Lua。

我有一个Foo类,我正在向Lua公开(通过tolua ++)。

Foo重载一些运算符,如下所示:

class Foo
{
   public:
      explicit Foo(const int i);
      bool operator==(const Foo& foo) const;
      bool operator< (const Foo& foo) const;
      int operator-(const Foo& foo) const;

   private:
      int m_ival;
};

我的问题是,在我的Lua脚本中,我可以在我的Lua脚本中使用如下所示的表达式:

f1 = Foo:new(42)
f2 = Foo:new(123)

if f1 < f2 then
   print(f2 -f1)
end

2 个答案:

答案 0 :(得分:3)

根据文档,tolua ++支持这一点 - 请参阅Binding classes and methods - Overloaded operators

  

tolua会自动绑定以下二元运算符:

operator+   operator-   operator*   operator/ 
operator<   operator>=  operator==  operator[]
     

对于关系运算符,toLua还会自动将返回的0值转换为nil,因此C中的false在Lua中变为false。

     

例如,假设在上面的代码中,而不是:

     

Point add (Point& other); // add points, returning another one

     我们有:

     

Point operator+ (Point& other); // add points, returning another one

     

在这种情况下,在Lua中,我们可以简单地写一下:

     

p3 = p1 + p2

答案 1 :(得分:0)

在Lua中可以实现所期望的行为。我不知道如何使用tolua ++(我从未使用过它),但它可以通过为您的userdata定义元方法来实现。有关详细信息,请查看Relational metamethods。这可能会给你一个线索。