Как можно добавить функцию класса в LuaBridge

124
12 марта 2021, 21:50

В функции инициализации функций для луа в моем классе, я бы хотел реализовать регистрацию функции из самого класса и что бы она выполнялась у каждого экземпляра отдельно, то есть не была статической, но не знаю как, подскажите пожалуйста, как это сделать. Вот мой класс -

//.h
#pragma once
#pragma comment(lib, "lua53.lib")
extern "C" {
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}
#include <iostream>
#include <LuaBridge/LuaBridge.h>
using namespace std;
using namespace luabridge;
#define SAFE_DELETE(x) { if(x) delete x; x = nullptr; }
class Lua_sup
{
private:
    string m_name;
    lua_State* L ;
    bool init_state = false;
    vector<string> draw;
public:
    Lua_sup(string name);
    Lua_sup() {};
    ~Lua_sup();
    bool init();
    bool test();
    lua_State* get_lua_state() { return L; }
    bool get_state() { return init_state; }
    void register_callback(string type, string name);
};
class vector2d
{
private :
    int m_x;
    int m_y;
public :
    vector2d() {        m_x = 0; m_y = 0;   }
    vector2d(int x,int y) { m_x = x; m_y = y; }
    int get_x() { return m_x; }
    int get_y() { return m_y; }
    void set_x(int x) { m_x = x; }
    void set_y(int y) { m_y = y; }
};
//.cpp
#include "Lua_sup.h"

Lua_sup::Lua_sup(string name)
{
    m_name = name;
    L = luaL_newstate();
    luaL_openlibs(L);
}

Lua_sup::~Lua_sup()
{

    lua_close(L);
}
void Lua_sup::register_callback(string type, string name) {
    cout << "print = " << type << endl;
    if (type == "draw")
    {
        draw.push_back(name);
    }
}
bool Lua_sup::init()
{
            try
    {
        getGlobalNamespace(L).addFunction("register_callback", register_callback); // Функцию которую я хотел бы добавить
    if (luaL_loadfile(L, m_name.c_str()) || lua_pcall(L, 0, 0, 0))   {
        cout << "Error";
        return 0;
    }

    init_state = true;



    getGlobalNamespace(L) 
        .beginClass<vector2d>("vector2d") 
        .addConstructor<void(*)(void)>() 
        .addConstructor<void(*)(int x,int y)>()
        .addFunction("get_x", &vector2d::get_x)
        .addFunction("get_y", &vector2d::get_y) 
        .addFunction("set_y", &vector2d::set_y)
        .addFunction("set_x", &vector2d::set_x) 
        .endClass(); //end class

    return 1;
    }
    catch (exception &e) {
        cout << e.what();
        return 0;
    }
    catch (...) {
        cout << "Unknown error";
        return 0;
    }

}
READ ALSO
как сделать свой тип в c++?

как сделать свой тип в c++?

Например я могу сделать в структуре или в классе вот так

86
Воспроизведение аудиофайла в Jquery

Воспроизведение аудиофайла в Jquery

Всем приветКак реализовать в Jquery, чтобы при каждом клике аудиофайл проигрывался всего один раз

114
Как передать table в textarea jQuery?

Как передать table в textarea jQuery?

Есть страница корзины, на странице товары и их параметры формируются в таблицу table

127
nav выходит за пределы div

nav выходит за пределы div

Всем приветПоявилась проблемка: nav выходит за пределы div при масштабирование окна браузера

111