【发布时间】:2017-04-17 20:08:40
【问题描述】:
我有下一个定义类:
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);
script1 和script2 运行没有问题,但是script3 给我下一个执行错误:
Error: "Incomplete equation" during evaluation at (9, 14)
从 ChaiScript 调用构造函数 MyType(std::initializer_list<MyType>) 的正确方法是什么?
【问题讨论】:
-
注意:正确的
std::initializer_list<>构造函数如下所示:MyType(std::initializer_list<MyType> list);请参阅:en.cppreference.com/w/cpp/utility/initializer_list 另请参阅:stackoverflow.com/a/17803511/2296177 -
@user2296177 感谢格式建议。
-
@chema989:ChaiScript 有办法注册可变参数函数吗?如果没有,我看不到 ChaiScript 能够做到这一点的方法。所有
initializer_list实例最终都来自一个braced-init-list。这是一个 C++ 语法结构; ChaiScript 无法制造这样的东西。 -
@NicolBolas ChaiScript 没有办法注册可变参数函数,必须为每个可能的参数组合注册一个函数。
标签: c++ constructor c++14 chaiscript stdinitializerlist