elelel / qluacpp

C++ interface for Quik trading terminal via lua bindings
48 stars 26 forks source link

Как вызвать OnParam callback? #4

Closed mmonk1980 closed 7 years ago

mmonk1980 commented 7 years ago

Это работает нормально:

q.set_callback(OnQuote);

а это нет:

q.set_callback(OnParam);

void OnParam(lua::state& l, const char class_code, const char sec_code) { qlua::extended_api q(l); int a = 5; }

mmonk1980 commented 7 years ago

Я посмотрел исходники он не реализован?

struct OnParam : public base {
static std::string name() { return "OnParam"; }
};

это OnQuote:

struct OnQuote : public base { typedef OnQuote type; typedef void (handler_type) (lua::state&, const char, const char*);

  static std::string name() { return "OnQuote"; }

  static int lua_handler(lua_State* L) {
    lua::state l(L);
    auto class_code = l.get_value<const char*>(-2);
    auto sec_code = l.get_value<const char*>(-1);
    handler_(l, class_code, sec_code);
    return 0;
  }
elelel commented 7 years ago

Да, в том, что сейчас опубликовано OnParam нет. В ближайшее время появится (после рефакторинга библиотеки).

mmonk1980 commented 7 years ago

Понял.

elelel commented 7 years ago

Сейчас можно объявить так:

void OnParam(const lua::state& l,
             ::lua::entity<::lua::type_policy<std::string>> class_code,
             ::lua::entity<::lua::type_policy<std::string>> sec_code) {
  std::cout << "OnParam: " << class_code() << " " << sec_code() << "\n";
}
LUACPP_STATIC_FUNCTION4(OnParam, OnParam, std::string, std::string)

... и зарегистрировать перед luaL_openlib так:

    ::lua::function::OnParam().register_in_lua(l, OnParam);
mmonk1980 commented 7 years ago

Рефакторинг библиотеки прошел или еще пишется?

mmonk1980 commented 7 years ago

Если пишется то когда она будет готова?

elelel commented 7 years ago

Чтобы вызывать OnParam, уже все готово.