встроенные Lua и перегруженные операторы C ++ - PullRequest
0 голосов
/ 23 декабря 2010

Я встраиваю Lua в свое приложение C ++.

У меня есть класс 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 ]

3 голосов
/ 23 декабря 2010

Согласно документации, tolua ++ поддерживает это - см. Связывание классов и методов - перегруженные операторы :

tolua автоматически связывает следующие бинарные операторы:

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

Для реляционных операторов toLua также автоматически преобразует возвращаемое значение 0 в nil, поэтому false в C становится false в Lua.

В качестве примера предположим, что в приведенном выше коде вместо:

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

у нас было:

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

В этом случае в Lua мы могли бы просто написать:

p3 = p1 + p2

0 голосов
/ 23 декабря 2010

Желаемое поведение возможно в Lua. Я не знаю, как это сделать с tolua ++ (я никогда не использовал его), но этого можно достичь, определив метаметоды для ваших пользовательских данных. Подробнее см. Реляционные метаметоды . Это может дать вам подсказку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...