Class AngelScript-避免隐式默认构造函数运行
我目前正在测试一些简单的AngelScript内容,注意到在如何从类初始化对象方面有点奇怪 假设我定义了这样一个类:Class AngelScript-避免隐式默认构造函数运行,class,angelscript,Class,Angelscript,我目前正在测试一些简单的AngelScript内容,注意到在如何从类初始化对象方面有点奇怪 假设我定义了这样一个类: class MyClass { int i; MyClass(int i) { this.i = i; } } 我可以通过以下操作创建此类的对象: MyClass obj = MyClass(5); MyClass obj; 但是,我似乎也可以通过这样做来创建对象: MyClass obj = MyClass(5); MyClas
class MyClass {
int i;
MyClass(int i) {
this.i = i;
}
}
我可以通过以下操作创建此类的对象:
MyClass obj = MyClass(5);
MyClass obj;
但是,我似乎也可以通过这样做来创建对象:
MyClass obj = MyClass(5);
MyClass obj;
这里的问题是,obj.i
由于未定义而成为默认值。
此外,在我的类中添加一个默认构造函数,并在每个构造函数中添加一个print函数调用,这表明当我执行MyClass obj=MyClass时(5)代码>两个构造函数都被调用,而不仅仅是具有匹配参数的构造函数。这对我来说似乎有风险,因为它可能会为这个“ghost”实例初始化许多不必要的属性
我可以通过使用句柄来避免这种双重初始化,但这更像是一种解决方案,而不是一种解决方案:
MyClass@ obj = MyClass(5);
因此,我的问题总结如下:
我可以要求调用特定的构造函数吗?
我可以阻止默认构造函数运行吗?
创建对象时,处理所需参数的正确方法是什么?
请注意,这完全是在天使脚本语言中,完全与宿主应用程序的C++代码分离。主机是2010年的,不是开源的,我对其实现的了解非常有限,因此如果问题存在,我无法更改它
要声明类并将您选择的值发送给构造函数,请尝试:
MyClass obj(5)
要防止使用默认构造函数,请创建并使用:
或
或
或
如果其中任何一个在您的环境中工作
与其他语言不同,将构造函数声明为private在as中似乎不起作用。我认为handle方法是一种可行的方法。至于#2,可能这里使用的AngelScript版本太旧了,因为将构造函数设置为private
,会导致“预期标识符”语法错误。不过,谢谢你;把手没问题,我修正了答案。MyClass@obj(5);没有编译(我检查了)。在我检查了构造函数声明为private realy不起作用后,我再次修复了我的答案,正如您所说。我尝试了您添加的4种解决方案,但没有一种被识别出来。它们都给出了语法错误,就好像它们是与签名不匹配的常规函数或未声明的引擎一样。如果这是可行的,它可能依赖于我的主机应用程序中没有实现的东西。
{
assert(1>2,"Trying to create uninitialized object of type that require init parameters");
}
{
engine.Exit();
}