我在我的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
答案 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。这可能会给你一个线索。