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 явно не связана с пользователем.