gpt4 book ai didi

c++ - 如何在 ChaiScript 中使用用户类型的 std::initializer_list 调用构造函数?

转载 作者:行者123 更新时间:2023-11-28 05:11:15 24 4
gpt4 key购买 nike

我有下一个定义类:

class MyType {
public:
MyType();
MyType(int x);
MyType(std::initializer_list<MyType> list);
}

我在 ChaiScript v6.0.0 中注册了我的自定义类及其构造函数,如下所示:

chai.add(chaiscript::user_type<MyType>(), "MyType");
chai.add(chaiscript::constructor<MyType()>(), "MyType");
chai.add(chaiscript::constructor<MyType(int)>(), "MyType");
chai.add(chaiscript::constructor<MyType(std::initializer_list<MyType>)>(), "MyType");

我有下一个脚本:

std::string script1 = R""(
def Test1() {
var m = MyType();
}

Test1();
)"";
auto res = chai.eval<MyType>(script1);


std::string script2 = R""(
def Test2() {
var m = MyType(10);
}

Test2();
)"";
auto res2 = chai.eval<MyType>(script2);


std::string script3 = R""(
def Test3() {
var m = MyType({10, 20});
}

Test3();
)"";
auto res3 = chai.eval<MyType>(script3);

script1script2运行没有问题,但是script3给我下一个执行错误:

Error: "Incomplete equation" during evaluation  at (9, 14)

调用构造函数的正确方法是什么MyType(std::initializer_list<MyType>)来自 ChaiScript?

最佳答案

ChaiScript 没有注册可变参数函数的方法,它必须为每个可能的参数组合注册一个函数,并且不能像 C++ 那样制造花括号初始化列表。

我找到的解决方法是为 MyType 添加一个接收 vector 的构造函数:

class MyType {
public:
MyType();
MyType(int x);
MyType(std::initializer_list<MyType> list);
MyType(const std::vector<MyType>& v);
}

在 ChaiScript v6.0.0 中注册我的自定义类及其构造函数,如下所示:

chai.add(chaiscript::user_type<MyType>(), "MyType");
chai.add(chaiscript::constructor<MyType()>(), "MyType");
chai.add(chaiscript::constructor<MyType(int)>(), "MyType");
chai.add(chaiscript::constructor<MyType(const std::vector<MyType>&)>(), "MyType");

并将 script3 更改为:

std::string script3 = R""(
def Test3() {
var m = MyType([MyType(10), MyType(20)]);
}

Test3();
)"";

关于c++ - 如何在 ChaiScript 中使用用户类型的 std::initializer_list 调用构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43458829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com