首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何添加全局std::map到chaiscript?

如何添加全局std::map到chaiscript?
EN

Stack Overflow用户
提问于 2018-07-12 16:17:40
回答 1查看 372关注 0票数 0

我想通过一个std::map给链表。不过,我不知道该怎么做。我的代码目前如下:

代码语言:javascript
复制
#include <map>
#include <string>
#include <chaiscript/chaiscript.hpp>

int main(int argc, char* argv[]) {
    chaiscript::ChaiScript chai;
    auto data = std::map<std::string, std::string>{
        { "key1", "val1"},
        { "key2", "val2"},
    };
    chai.add_global(chaiscript::var(&data), "data");
    chai.eval(R"(
        print(data["key1"]);
    )");
}

但是,这段代码崩溃时有一个例外,即,chaiscript不知道如何处理括号[]操作符。我怎么才能解决这个问题?

我可以告诉chaiscript什么是正确的函数,但如果映射与_chaiscript_s内部Map类型兼容,我更喜欢它!

更新:

我在文档中找到了一点,这说明chaiscript映射类型支持任意输入。看一下代码,这似乎是由Boxed_Value类型完成的。然而,这可能意味着根本不可能直接将std::map插入脚本中。

我现在正在考虑编写一个自定义类型,或者一个转换函数来解决这个问题。随时通知你..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-13 11:06:33

据我所见,开箱即用的链表只为您提供了std::map<std::string,chaiscript::Boxed_Value>映射类型.因此,如果要将自己的映射添加到脚本中,则需要提供带有新类型的chaiscript,或者将其转换为给定的类型。因此,我看到以下解决办法:

案例1:您只需要从 chaiscript 到c++得到一张地图

这个案例可以在文档中找到。您需要提供一个转换函数,然后离开。

代码语言:javascript
复制
chai.add(chaiscript::map_conversion<std::map<std::string, std::string>>());
auto map = chai.boxed_cast<std::map<std::string, std::string>>(chai.eval("data"));

案例2:您只需向 chaiscript 提供一张来自c++的地图

这与Case 1基本相同,但您必须自己提供转换函数。

代码语言:javascript
复制
auto convert = [](const std::map<std::string, std::string>& std_map) {
    auto chai_map = std::map<std::string, chaiscript::Boxed_Value>{};
    for (auto&& entry : std_map)
        chai_map.emplace(entry.first, chaiscript::var(entry.second));
    return chai_map;
};
chai.add(chaiscript::var(convert(data)),"data");

案例3:您希望在 chaiscript 和c++之间共享一个全局值

这个案子相当棘手。您要么必须提供带有get_map()和send_map()函数的chaiscript,后者处理数据同步:

代码语言:javascript
复制
chai.eval(R"(
    data = get_map();
    data["key1"] = "val1";
    send_map(data);
)");

或者您必须添加一个自定义数据类型,它在后台处理同步。

我的解决方案:

幸运的是,我并不需要chaiscript和c++之间的共享状态,因此可以依赖于Case 2的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51310365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档