0

I'm trying to export my vectors class

            .beginClass<Vector>("Vector")
            .addConstructor<void(*)()>()
            .addConstructor<void(*)(float, float, float)>()
            .addFunction("__eq", &Vector::operator==)
            .addFunction("__add", &Vector::operator+)
            .addData("x", &Vector::x)
            .addData("y", &Vector::y)
            .addData("z", &Vector::z)
            .addFunction("Length", &Vector::Length)
            .addFunction("Angle", &Vector::Angle)
            .addFunction("Distance", &Vector::DistTo)
        .endClass()

but when i try and do the other 3 operators, I have multiple overloads for them. How can I specify which one I want to use and is this even possible?

4

3 回答 3

0

所以我只是做了一个加/减/乘/除函数并调用它。猜测运营商只是不想遵守。

于 2015-12-14T09:01:11.243 回答
0

infect luabridge 可以这样实现,如果你定义了一个类A

.addFunction("__eq", &A::equal )

“相等”应声明为:

bool A::equal( const A & )

然后 :

if obj1 == obj2 then
end

“平等”会起作用!

但是如果你实现 A 类 B 的子类:public A

这将花费你很多时间!

首先你必须专门化模板类或模板方法

luabridge::UserdataValue 

luabridge::UserdataPtr::push(lua_State* const L, T* const p)

指定您需要注册对象或指针的类的(元)表

你应该阅读 luabridge 的源代码来完成这个!

然后!

您应该再次将此功能注册到B!

.addFunction("__eq", &B::equal )

lua代码:

local inst_a = app.new_class_A();
local inst_b = app.new_class_B();
-- this will call the '__eq' in B's metatable
if( inst_b == inst_a )then
end
-- this will call the '__eq' in A's metatable
if( inst_a == inst_b )then
end

调用 __eq 时,luabridge 不会搜索类的父类元数据表,所以你应该重新注册到 A 的子类!

希望它会帮助你!对不起我糟糕的英语!

于 2017-04-14T03:35:33.253 回答
0

如果您有一个函数重载int MyClass::Func(int)MyClass* MyClass::Func(MyClass)那么您可以通过以下方式定义要使用的重载。在此示例中,我选择MyClass* MyClass::Func(MyClass)用作重载。

.addFunction("Func", (MyClass*(MyClass::*)(MyClass)) &MyClass::Func)

所以这里发生的是函数签名提供了指向函数的指针。

于 2015-12-14T00:39:04.843 回答