types - SWIG/Lua : Determine member field data type

标签 types lua swig

SWIG 慷慨地提供了 swig_type() 函数来获取传递的 userdata 对象的数据类型的字符串表示形式。但是,对于成员字段,SWIG 和 Lua 认为它们是简单的“数字”项,因此仅打印“数字”而不是数据类型的名称。

例如

typedef num_years int;

class Person
{
    public:
           Person * spouse;
           num_years   age;
};

在 C++ 中会导致:

Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio

> p = MyModule.Person();
> print(swig_type(p.spouse));
Person *
> print(swig_type(p.age));
number

是否有一些后门路线可以用来确定成员字段的数据类型?我发现 get 和 set 函数在验证参数时具有数字字段的正确字符串表示形式。

感谢您的帮助!

最佳答案

SWIG 包装的 C++ 对象是符合一组特定规则的 Lua 用户数据对象。 swig_type() 的工作原理是查看这些用户数据对象并检索 SWIG 存储在那里的类型名称信息。但 age 是直接表示的,因此没有要查找的类型名称字段,因此 swig_type() 无法发挥其魔力。您可以通过使 num_years 成为一个包装 int 的不透明类类型(并且可能定义一些隐式转换以方便在 C++ 中使用)来获得您想要的东西,但是为了获得可疑的返回,需要做大量的工作。

get 和 set 函数通过完全不同的机制工作;它们具有正确的签名,因为 SWIG 在编译时将其存储在生成的包装器中,从接口(interface)文件复制。

关于types - SWIG/Lua : Determine member field data type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1504747/

相关文章:

dictionary - 您是否可以在lua表中使用数字键?

javascript - Jquery AJAX 类型属性

C# 字典在另一个字典中使用 TValue

lua - 编译你的lua文件

python - Scrapy Splash 截图?

c# - C++ -> C# 使用 SWIG : how to use default constructor for a class

python - swig python 使用 void ** 接口(interface)连接函数

javascript - 将 JavaScript 数组高效地传递给 c/c++ 库并返回

具有多种类型的 C++ 映射

python - 将 zope 中的请求对象转换为数组