【问题标题】:luabridge class object inside class类中的 luabridge 类对象
【发布时间】:2014-06-21 16:47:01
【问题描述】:

奇怪的问题我有一个使用多个类的程序,其中一些类用于定义其他类中的对象,但我无法修改它们的值,不确定这是否有意义,但我会尝试演示

C++ 文件

class A{
public:
    A(){
        c = 0
    }
    int c;
};

class B{
public:
    A d;
};

luabridge::getNamespace(L)
    .addNamespace("test")
        .addClass<A>("A")
            .addConstructor<void(*) ()>()
            .addData("c", &A::c)
        .endClass()
        .addClass<B>("B")
            .addConstructor<void(*) ()>()
            .addData("d", &A::d)
        .endClass()
    .endNamespace();

现在在我们拥有的 lua 文件中

var = test.B()
var.d.c = 2
print(var.d.c)

然后程序打印出来

0

只是为了澄清如果 A 的构造函数将 c 设置为 666 那么程序输出 666

【问题讨论】:

  • 为什么 B.d.c = 2 会起作用?我在任何类中都看不到任何静态成员。
  • 静态成员将如何发挥作用?一切都在 C++ 中运行,只有当我在 lua 中尝试相同的事情时才会遇到问题。
  • 你能把你在 luabridge 初始化中省略的其他“废话”包括进来吗?
  • 是的,请稍等
  • @TimCooper by static 你的意思是静态 int c;

标签: c++ lua luabridge


【解决方案1】:

声明为Type variableName 的对象通过值传递给Lua,作为Lua 管理的副本。因此var.d 返回该d 对象的副本,而var.d.c 您正在修改该副本的c 变量,而不是原始c 对象的c 变量。

声明为Type* variableName 的对象通过引用传递,因此您修改了原始d 对象,这就是您的第二种方法有效的原因。

更多信息请关注LuaBridge manual

【讨论】:

    【解决方案2】:

    我所要做的就是让 B 类中的 A 类对象成为一个指针,但我不知道为什么……大约 2 天后,我在调试路上发现了它

    class A{
    public:
        A(){
            c = 0
        }
        int c;
    };
    
    class B{
    public:
        A* d;
    };
    
    luabridge::getNamespace(L)
        .addNamespace("test")
            .addClass<A>("A")
                .addConstructor<void(*) ()>()
                .addData("c", &A::c)
            .endClass()
            .addClass<B>("B")
                .addConstructor<void(*) ()>()
                .addData("d", &A::d)
            .endClass()
        .endNamespace();
    

    【讨论】:

    • 如果有人能解释为什么这会解决它,将不胜感激
    猜你喜欢
    • 2021-12-02
    • 1970-01-01
    • 2021-11-25
    • 2014-04-22
    • 2013-04-18
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多