Tolua++ и __tostring

Может ли кто-нибудь здесь помочь мне с использованием tolua++ и __tostring?

Если я пытаюсь установить свойство __tostring для метатаблицы объекта Lua, связанного с объектом C++, я получаю сбой.

Например

local x = foo.new() -- foo bound from tolua++
getmetatable(x).__tostring = function(t) end

... вызывает сбой.

Кажется, что установка метатабельных функций, которые уже существуют, например, __eq, - это нормально... в то время как установка функции, которая еще не существует, например, __tostring или 'foobar', вызывает сбой.

1 ответ

Я думаю, что нашел решение своего собственного вопроса...

Я могу просто связать функцию с именем __tostring из моих базовых классов C++, используя tolua. Затем он появляется в классе metatable, поэтому вызывается (как и ожидалось) из Lua, если объект этого класса печатается.

Кроме того, я могу затем заменить функцию на стороне Lua (например, используя getmetatable(foo).__tostring = somenewfunction) без каких-либо проблем.

Мне все еще было бы интересно узнать, почему происходит сбой, если функция __tostring явно не связана с пользователем.

Другие вопросы по тегам