如何在 ChaiScript 中调用具有用户类型 std::initializer_list 的构造函数?
How call a constructor with std::initializer_list of a user type in ChaiScript?
我有下一个定义class:
class MyType {
public:
MyType();
MyType(int x);
MyType(std::initializer_list<MyType> list);
}
我在 ChaiScript v6.0.0 中注册了我的自定义 class 及其构造函数,如下所示:
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);
script1
和script2
运行没有问题,但是script3
给我下一个执行错误:
Error: "Incomplete equation" during evaluation at (9, 14)
从 ChaiScript 调用构造函数 MyType(std::initializer_list<MyType>)
的正确方法是什么?
ChaiScript 没有注册可变参数函数的方法,必须为每个可能的参数组合注册一个函数,并且不能像 C++ 那样生成花括号初始化列表。
我找到的解决方法是为 MyType
添加一个接收向量的构造函数:
class MyType {
public:
MyType();
MyType(int x);
MyType(std::initializer_list<MyType> list);
MyType(const std::vector<MyType>& v);
}
在 ChaiScript v6.0.0 中注册我的自定义 class 及其构造函数,如下所示:
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();
)"";
我有下一个定义class:
class MyType {
public:
MyType();
MyType(int x);
MyType(std::initializer_list<MyType> list);
}
我在 ChaiScript v6.0.0 中注册了我的自定义 class 及其构造函数,如下所示:
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);
script1
和script2
运行没有问题,但是script3
给我下一个执行错误:
Error: "Incomplete equation" during evaluation at (9, 14)
从 ChaiScript 调用构造函数 MyType(std::initializer_list<MyType>)
的正确方法是什么?
ChaiScript 没有注册可变参数函数的方法,必须为每个可能的参数组合注册一个函数,并且不能像 C++ 那样生成花括号初始化列表。
我找到的解决方法是为 MyType
添加一个接收向量的构造函数:
class MyType {
public:
MyType();
MyType(int x);
MyType(std::initializer_list<MyType> list);
MyType(const std::vector<MyType>& v);
}
在 ChaiScript v6.0.0 中注册我的自定义 class 及其构造函数,如下所示:
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();
)"";