Не удается зарегистрировать тип в chaiscript

Я хочу зарегистрировать тип в chaiscript для передачи данных из функции chaiscript в пространство c ++:

class Layout {
std::string         device_id;
std::string         address;
std::vector<bool>   bits;

public:
Layout(std::string id)
: device_id(id)
{ /* Intentionally left blank */ }

void setDeviceId(std::string id) {
this->device_id = id;
}

const std::string getDeviceId(void) const {
return this->device_id;
}

void setAddress(std::string addr) {
this->address = addr;
}

const std::string getAddress(void) const {
return this->address;
}

// overload with std::vector<bool> outcommented for simplicity
void setBits(std::vector<int> v) {
this->bits.clear();
for (auto b : v) {
this->bits.push_back(b != 0);
}
}

const std::vector<bool> getBits(void) const {
return this->bits;
}
};

сделать это в chaiscript:

def generate(name, params) {
var layout = Layout(name);
layout.setAddress("");
layout.setBits([0, 1, 0, 1, 0, 0, 0, 0]);
return layout;
}

Но получаю огромный ошибка вывода шаблона, которую я не понимаю, к сожалению.

Код, который регистрирует тип:

void register_layout_type(std::shared_ptr<chaiscript::ChaiScript> engine)
noexcept
{
//engine->add(chaiscript::constructor<Layout (std::string)>(), "Layout");
//engine->add(chaiscript::user_type<Layout>(), "Layout");

chaiscript::ModulePtr m = chaiscript::ModulePtr(new chaiscript::Module());
chaiscript::utility::add_class<Layout>(*m,
"Layout",
{
chaiscript::constructor<Layout()>(),
// chaiscript::constructor<Test(const Test &)>()
},

{
{ chaiscript::fun(&Layout::setDeviceId,     "setDeviceId") },
{ chaiscript::fun(&Layout::getDeviceId,     "getDeviceId") },
{ chaiscript::fun(&Layout::setAddress,      "setAddress") },
{ chaiscript::fun(&Layout::getAddress,      "getAddress") },
{ chaiscript::fun(&Layout::getBits,         "getBits") },
//{ chaiscript::fun(static_cast<void Layout::(*std::vector<bool>)>(&Layout::setBits), "setBits") },
{ chaiscript::fun(&Layout::setBits, "setBits") }
});

engine->add(m);
}

Выдержка из вывода:

<WORKDIR>src/expr/computer.cpp: In function 'void imc::expr::register_layout_type(std::shared_ptr<chaiscript::ChaiScript>)':
<WORKDIR>src/expr/computer.cpp:178:22: error: no matching function for call to 'add_class(chaiscript::Module&, const char [7], <brace-enclosed initializer list>, <brace-enclosed initializer list>)'
});
^
In file included from <WORKDIR>src/chaiscript/include/chaiscript/dispatchkit/bootstrap.hpp:14:0,
from <WORKDIR>src/chaiscript/include/chaiscript/chaiscript_stdlib.hpp:23,
from <WORKDIR>src/chaiscript/include/chaiscript/chaiscript.hpp:825,
from <WORKDIR>src/expr/computer.cpp:5:
<WORKDIR>src/chaiscript/include/chaiscript/dispatchkit/../utility/utility.hpp:53:12: note: candidate: template<class Class, class ModuleType> void chaiscript::utility::add_class(ModuleType&, const string&, const std::vector<std::shared_ptr<chaiscript::dispatch::Proxy_Function_Base> >&, const std::vector<std::pair<std::shared_ptr<chaiscript::dispatch::Proxy_Function_Base>, std::__cxx11::basic_string<char> > >&)
void add_class(ModuleType &t_module,
^~~~~~~~~
<WORKDIR>src/chaiscript/include/chaiscript/dispatchkit/../utility/utility.hpp:53:12: note:   template argument deduction/substitution failed:
<WORKDIR>src/expr/computer.cpp:178:22: note:   cannot convert '{{chaiscript::fun(T&&, const Q&) [with T = void (imc::types::platform::Layout::*)(std::__cxx11::basic_string<char>); Q = char [12]; chaiscript::Proxy_Function = std::shared_ptr<chaiscript::dispatch::Proxy_Function_Base>]("setDeviceId")}, {chaiscript::fun(T&&, const Q&) [with T = const std::__cxx11::basic_string<char> (imc::types::platform::Layout::*)() const; Q = char [12]; chaiscript::Proxy_Function = std::shared_ptr<chaiscript::dispatch::Proxy_Function_Base>]("getDeviceId")}, {chaiscript::fun(T&&, const Q&) [with T = void (imc::types::platform::Layout::*)(std::__cxx11::basic_string<char>); Q = char [11]; chaiscript::Proxy_Function = std::shared_ptr<chaiscript::dispatch::Proxy_Function_Base>]("setAddress")}, {chaiscript::fun(T&&, const Q&) [with T = const std::__cxx11::basic_string<char> (imc::types::platform::Layout::*)() const; Q = char [11]; chaiscript::Proxy_Function = std::shared_ptr<chaiscript::dispatch::Proxy_Function_Base>]("getAddress")}, {chaiscript::fun(T&&, const Q&) [with T = const std::vector<bool> (imc::types::platform::Layout::*)() const; Q = char [8]; chaiscript::Proxy_Function = std::shared_ptr<chaiscript::dispatch::Proxy_Function_Base>]("getBits")}, {chaiscript::fun(T&&, const Q&) [with T = void (imc::types::platform::Layout::*)(std::vector<int>); Q = char [8]; chaiscript::Proxy_Function = std::shared_ptr<chaiscript::dispatch::Proxy_Function_Base>]("setBits")}}' (type '<brace-enclosed initializer list>') to type 'const std::vector<std::pair<std::shared_ptr<chaiscript::dispatch::Proxy_Function_Base>, std::__cxx11::basic_string<char> > >&'
});
^
In file included from <WORKDIR>src/chaiscript/include/chaiscript/dispatchkit/bootstrap.hpp:14:0,
from <WORKDIR>src/chaiscript/include/chaiscript/chaiscript_stdlib.hpp:23,
from <WORKDIR>src/chaiscript/include/chaiscript/chaiscript.hpp:825,
from <WORKDIR>src/expr/computer.cpp:5:
<WORKDIR>src/chaiscript/include/chaiscript/dispatchkit/../utility/utility.hpp:73:7: note: candidate: template<class Enum, class ModuleType> typename std::enable_if<std::is_enum<_Tp>::value, void>::type chaiscript::utility::add_class(ModuleType&, const string&, const std::vector<std::pair<typename std::underlying_type<_Tp>::type, std::__cxx11::basic_string<char> > >&)
add_class(ModuleType &t_module,
^~~~~~~~~
<WORKDIR>src/chaiscript/include/chaiscript/dispatchkit/../utility/utility.hpp:73:7: note:   template argument deduction/substitution failed:
<WORKDIR>src/chaiscript/include/chaiscript/dispatchkit/../utility/utility.hpp: In substitution of 'template<class Enum, class ModuleType> typename std::enable_if<std::is_enum<_Tp>::value, void>::type chaiscript::utility::add_class(ModuleType&, const string&, const std::vector<std::pair<typename std::underlying_type<_Tp>::type, std::__cxx11::basic_string<char> > >&) [with Enum = imc::types::platform::Layout; ModuleType = <missing>]':
<WORKDIR>src/expr/computer.cpp:178:22:   required from here
<WORKDIR>src/chaiscript/include/chaiscript/dispatchkit/../utility/utility.hpp:73:7: error: no type named 'type' in 'struct std::enable_if<false, void>'
<WORKDIR>src/chaiscript/include/chaiscript/dispatchkit/../utility/utility.hpp:99:7: note: candidate: template<class EnumClass, class ModuleType> typename std::enable_if<std::is_enum<_Tp>::value, void>::type chaiscript::utility::add_class(ModuleType&, const string&, const std::vector<std::pair<EnumClass, std::__cxx11::basic_string<char> > >&)
add_class(ModuleType &t_module,
^~~~~~~~~
[...]

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector