我已经构建了一个自定义的类型系统,用于在应用程序中编写C脚本。脚本是动态编译的,允许与应用程序内部数据交互。这个类型系统是以抽象的方式设计的,使用了如下接口
IValue
. 实施
可能是
RefString
,
RefInteger
RefDouble
(除其他外,这足以说明我的问题)。
伊瓦卢
物体有点不自然。始终使用接口与对象交互被认为是一个好的设计,但不可能为接口定义隐式转换或重载运算符。这种情况下,丑陋的显式转换是不可避免的,以便使用正确的运算符。
IValue Add(IValue a, IValue b)
{
//return a+b; // won't work: which operator +() to use?
return (RefInteger)a + (RefInteger)b;
}
对于涉及值类型的表达式中的C,提供隐式转换。设计这样一个定制系统的好方法是什么?
我重写了打字系统
伊瓦卢
RefValue
基类。这样就可以消除部分显式类型转换。我在这个基类中实现了一些运算符重载,但是这给默认的转换运算符带来了很多麻烦。。。除此之外,要在运算符实现中实现的逻辑还包含许多有关系统中类型的知识。我认为这仍然是一个必须走的道路,但有什么规则要遵循,以一个良好和安全的方式实施这一点?
编辑
:经过一段时间的挣扎,我可以发现一些规则是:
-
仅声明基类型(int、double、string,…)中的隐式转换运算符
-
声明显式转换为基类型(以避免隐式转换为int!!什么事情经常发生,但为什么?)
-