我如何让SWIG为Lua创建一个二元运算符,其左参数为标量,右参数为自定义类?

SWIG 文档展示了如何重载运算符。其中一个示例是一个 Complex 类,他们展示了如何重载 operator+。他们也有一个关于混合 double 和 Complex 的示例。然而,给出的示例虽然定义了 Complex operator+(double, const Complex&),但仅适用于 Complex+double。 接下来通过以下示例说明:

a = Complex(2,3);
b = a+3;
print(b);
b = 3+a;
print(b);

输出如下:

<Complex userdata: 7FFE30C47438>
Could not execute script file test.lua: Error in Complex::__add__ (arg 1), expected 'Complex *' got 'number'

输出的第一行是第一次调用 print(b) 的结果。对 3+a 的调用失败了。

如何让 SWIG 生成的代码能够在标量在左手边,而 Complex 在右手边时也能工作呢?

点赞