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

我正在将 Lua 嵌入到我的 C++ 应用程序中。

我有一个我正在通过 tolua++ 将其暴露给 Lua 的类 Foo。

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 脚本中,我是否可以使用类似下面的表达式:

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

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

来自 StackOverflow

原文链接 https://stackoverflow.com/questions/4517550

点赞
stackoverflow用户426288
stackoverflow用户426288

想要的行为在 Lua 中是可能的。我不知道如何用 tolua++ 实现它(我从未使用过它),但可以通过为您的 userdata 定义元方法来实现。有关详细信息,请查看关系元方法。这可能会给您一些提示。

2010-12-23 10:43:14
stackoverflow用户168225
stackoverflow用户168225

根据 tolua++ 的文档,它支持此功能 - 请参见绑定类和方法 - 重载运算符

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

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

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

例如,假设在上面的代码中,我们不是拥有:

Point add (Point& other); // 添加点,返回另一个点

而是:

Point operator+ (Point& other); // 添加点,返回另一个点

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

p3 = p1 + p2

2010-12-23 10:54:58