Объекты C ++ в оболочке SWIG - это объекты пользовательских данных Lua, соответствующие определенному набору правил. swig_type()
работает, вглядываясь в эти объекты пользовательских данных и извлекая информацию имени типа, хранящуюся там SWIG. Но age
представлен непосредственно, поэтому нет поля с именем типа, которое нужно искать, поэтому swig_type()
не может творить чудеса. Вы можете получить то, что вы хотите, сделав num_years непрозрачным типом класса, который заключает в себе int (и который, возможно, определяет некоторые неявные преобразования для простоты использования в C ++), но это большая работа, чтобы получить сомнительное вознаграждение.
Функции get и set работают по совершенно другому механизму; они имеют правильную подпись, потому что SWIG сохраняет ее в сгенерированной оболочке во время компиляции, копируя из файла интерфейса.