2010-12-23 19 views
0

我在我的C++應用程序中嵌入了Lua。嵌入Lua和重載的C++運算符

我有一個類Foo,我正在接觸Lua(通過tolua ++)。

符重載一些運營商如下圖所示:

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

當你嘗試時會發生什麼? – 2010-12-23 11:11:35

回答

3

根據文檔tolua ++支持此 - 見Binding classes and methods - Overloaded operators

tolua自動綁定下列二進制運算符:

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

對於關係運算符,toLua還自動返回的0值轉換成無,所以在C中的虛假在Lua中變成虛假的。

作爲一個例子,假設的是,在上面的代碼中,代替具有:

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

我們有:

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

在這種情況下,在Lua,我們可以簡單地編寫:

p3 = p1 + p2

0

在Lua中可能需要的行爲是可能的。我不知道如何用tolua ++來做到這點(我從來沒有用過),但是可以通過爲你的用戶數據定義metamethods來實現。詳情請看Relational metamethods。這可能會給你一個線索。